From 11618af21cb197eab65900f4143954b463c15045 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 23 Jun 2026 15:53:17 -0700 Subject: [PATCH 01/15] use extern API --- docs/src/tutorials/mnist_quantization.ipynb | 448 +++++++++++++++----- 1 file changed, 345 insertions(+), 103 deletions(-) diff --git a/docs/src/tutorials/mnist_quantization.ipynb b/docs/src/tutorials/mnist_quantization.ipynb index 957cc63..19a37d4 100644 --- a/docs/src/tutorials/mnist_quantization.ipynb +++ b/docs/src/tutorials/mnist_quantization.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 1, "id": "954e0f62", "metadata": { "execution": { @@ -79,7 +79,22 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 2, + "id": "c56dc8ec", + "metadata": {}, + "outputs": [], + "source": [ + "from coreai_torch import (\n", + " TorchConverter,\n", + " ExternalizeSpec,\n", + " mark_for_externalization,\n", + " get_decomp_table,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "id": "a55c2a50", "metadata": { "execution": { @@ -93,10 +108,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 24, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -111,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 4, "id": "978adffb", "metadata": { "execution": { @@ -142,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 5, "id": "e0b7cfe7", "metadata": { "execution": { @@ -180,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 12, "id": "8671c764", "metadata": { "execution": { @@ -192,6 +207,18 @@ }, "outputs": [], "source": [ + "from coreai_torch.composite_ops import RMSNormImpl\n", + "class RMSNorm(nn.Module):\n", + " def __init__(self, dim: int, eps: float = 1e-5):\n", + " super().__init__()\n", + " self.weight = nn.Parameter(torch.ones(dim))\n", + " # self.eps = eps\n", + " self.norm = RMSNormImpl(eps=eps)\n", + "\n", + " def forward(self, x: torch.Tensor) -> torch.Tensor:\n", + " return self.norm(x, self.weight)\n", + "\n", + "\n", "class MnistNetwork(nn.Module):\n", " def __init__(self, num_classes: int = 10, state_dict: dict | None = None) -> None:\n", " super().__init__()\n", @@ -200,6 +227,7 @@ " nn.ReLU(),\n", " nn.MaxPool2d(2, stride=2, padding=0),\n", " nn.Flatten(),\n", + " RMSNorm(2352),\n", " nn.Linear(2352, num_classes),\n", " )\n", " if state_dict is not None:\n", @@ -221,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 13, "id": "f48fdf9b", "metadata": { "execution": { @@ -276,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 14, "id": "878f7025", "metadata": { "execution": { @@ -298,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 15, "id": "35dbf869", "metadata": { "execution": { @@ -327,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 16, "id": "3bbae265", "metadata": { "execution": { @@ -337,43 +365,12 @@ "shell.execute_reply": "2026-06-02T20:30:29.735702Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "==========================================================================================\n", - "Layer (type:depth-idx) Output Shape Param #\n", - "==========================================================================================\n", - "MnistNetwork [1, 10] --\n", - "├─Sequential: 1-1 [1, 10] --\n", - "│ └─Conv2d: 2-1 [1, 12, 28, 28] 120\n", - "│ └─ReLU: 2-2 [1, 12, 28, 28] --\n", - "│ └─MaxPool2d: 2-3 [1, 12, 14, 14] --\n", - "│ └─Flatten: 2-4 [1, 2352] --\n", - "│ └─Linear: 2-5 [1, 10] 23,530\n", - "==========================================================================================\n", - "Total params: 23,650\n", - "Trainable params: 23,650\n", - "Non-trainable params: 0\n", - "Total mult-adds (Units.MEGABYTES): 0.12\n", - "==========================================================================================\n", - "Input size (MB): 0.00\n", - "Forward/backward pass size (MB): 0.08\n", - "Params size (MB): 0.09\n", - "Estimated Total Size (MB): 0.17\n", - "==========================================================================================" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "basic_cnn_model = MnistNetwork(num_classes=10)\n", "\n", "# Print summary of model\n", - "summary(basic_cnn_model, input_size=(1, 1, 28, 28))" + "# summary(basic_cnn_model, input_size=(1, 1, 28, 28))" ] }, { @@ -394,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 17, "id": "91c17bb8", "metadata": { "execution": { @@ -409,21 +406,12 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.3126\n", - " Epoch 2: loss=0.1170\n", - " Epoch 3: loss=0.0821\n", - " Epoch 4: loss=0.0669\n", - " Epoch 5: loss=0.0590\n", - " Epoch 6: loss=0.0522\n", - " Epoch 7: loss=0.0481\n", - " Epoch 8: loss=0.0452\n", - " Epoch 9: loss=0.0415\n", - " Epoch 10: loss=0.0379\n" + " Epoch 1: loss=0.2581\n" ] } ], "source": [ - "EPOCHS = 10\n", + "EPOCHS = 1\n", "\n", "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizer = create_adam_optimizer(basic_cnn_model)\n", @@ -446,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 18, "id": "fcb3fd97", "metadata": { "execution": { @@ -461,7 +449,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Baseline accuracy: 0.9799\n" + "Baseline accuracy: 0.9664\n" ] } ], @@ -488,7 +476,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 19, "id": "7434e08f", "metadata": { "execution": { @@ -498,7 +486,17 @@ "shell.execute_reply": "2026-06-02T20:31:32.431486Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W0623 15:14:38.736000 5626 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", + "scikit-learn version 1.9.0 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.\n", + "Torch version 2.11.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.7.0 is the most recent version that has been tested.\n" + ] + } + ], "source": [ "from coreai_opt.quantization import (\n", " ModuleQuantizerConfig,\n", @@ -520,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 20, "id": "0218c7aa", "metadata": { "execution": { @@ -551,7 +549,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 21, "id": "d1fd4ba2", "metadata": { "execution": { @@ -562,6 +560,14 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", + " return cls.__new__(cls, *args)\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -584,6 +590,18 @@ " )\n", ")\n", "\n", + "\n", + "markers = mark_for_externalization(\n", + " wo_model,\n", + " [\n", + " ExternalizeSpec(\n", + " target_class=RMSNormImpl,\n", + " composite_op_name=\"rms_norm\",\n", + " composite_attrs=[\"axes\", \"eps\"],\n", + " ),\n", + " ],\n", + ")\n", + "\n", "wo_quantizer = Quantizer(wo_model, wo_config)\n", "wo_prepared = wo_quantizer.prepare(example_inputs)\n", "print(f\"Prepared weight-only quantization with dtype={WEIGHT_DTYPE}\")" @@ -607,7 +625,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 22, "id": "db4e1e88", "metadata": { "execution": { @@ -622,7 +640,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight-only PTQ accuracy: 0.9800\n" + "Weight-only PTQ accuracy: 0.9666\n" ] } ], @@ -659,7 +677,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 23, "id": "ad3be560", "metadata": { "execution": { @@ -687,7 +705,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 24, "id": "14a00586", "metadata": { "execution": { @@ -698,6 +716,14 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", + " return cls.__new__(cls, *args)\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -720,6 +746,16 @@ " )\n", ")\n", "\n", + "markers = mark_for_externalization(\n", + " wa_model,\n", + " [\n", + " ExternalizeSpec(\n", + " target_class=RMSNormImpl,\n", + " composite_op_name=\"rms_norm\",\n", + " composite_attrs=[\"axes\", \"eps\"],\n", + " ),\n", + " ],\n", + ")\n", "wa_quantizer = Quantizer(wa_model, wa_config)\n", "wa_prepared = wa_quantizer.prepare(example_inputs)\n", "print(\n", @@ -739,7 +775,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 25, "id": "cab3a185", "metadata": { "execution": { @@ -774,7 +810,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 26, "id": "a47189f5", "metadata": { "execution": { @@ -789,7 +825,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight + Activation accuracy after prepare + calibration: 0.9798\n" + "Weight + Activation accuracy after prepare + calibration: 0.9609\n" ] } ], @@ -827,7 +863,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 27, "id": "1209c6c2", "metadata": { "execution": { @@ -837,41 +873,27 @@ "shell.execute_reply": "2026-06-02T20:32:37.588767Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Epoch 1: loss=0.0276, accuracy=0.9832\n", - " Epoch 2: loss=0.0261, accuracy=0.9828\n", - " Epoch 3: loss=0.0253, accuracy=0.9835\n", - " Epoch 4: loss=0.0249, accuracy=0.9837\n", - " Epoch 5: loss=0.0242, accuracy=0.9830\n", - "\n", - "QAT final accuracy: 0.9830\n" - ] - } - ], + "outputs": [], "source": [ - "QAT_EPOCHS = 5\n", - "qat_optimizer = create_adam_optimizer(wa_prepared, lr=1e-4)\n", + "# QAT_EPOCHS = 0\n", + "# qat_optimizer = create_adam_optimizer(wa_prepared, lr=1e-4)\n", "\n", - "wa_prepared.to(\"mps\")\n", + "# wa_prepared.to(\"cpu\")\n", "\n", - "for epoch in range(QAT_EPOCHS):\n", - " with wa_quantizer.training_mode():\n", - " epoch_loss = train_epoch(\n", - " model=wa_prepared,\n", - " train_loader=train_loader,\n", - " optimizer=qat_optimizer,\n", - " loss_fn=torch.nn.CrossEntropyLoss(),\n", - " )\n", + "# for epoch in range(QAT_EPOCHS):\n", + "# with wa_quantizer.training_mode():\n", + "# epoch_loss = train_epoch(\n", + "# model=wa_prepared,\n", + "# train_loader=train_loader,\n", + "# optimizer=qat_optimizer,\n", + "# loss_fn=torch.nn.CrossEntropyLoss(),\n", + "# )\n", "\n", - " qat_acc = eval_model(wa_prepared, test_loader)\n", - " print(f\" Epoch {epoch + 1}: loss={epoch_loss:.4f}, accuracy={qat_acc:.4f}\")\n", + "# qat_acc = eval_model(wa_prepared, test_loader)\n", + "# print(f\" Epoch {epoch + 1}: loss={epoch_loss:.4f}, accuracy={qat_acc:.4f}\")\n", "\n", - "qat_prepared = wa_prepared.cpu()\n", - "print(f\"\\nQAT final accuracy: {qat_acc:.4f}\")" + "# qat_prepared = wa_prepared.cpu()\n", + "# print(f\"\\nQAT final accuracy: {qat_acc:.4f}\")" ] }, { @@ -896,7 +918,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 28, "id": "76f11a15", "metadata": { "execution": { @@ -927,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 29, "id": "f2b809f3", "metadata": { "execution": { @@ -938,12 +960,129 @@ } }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExportedProgram:\n", + " class GraphModule(torch.nn.Module):\n", + " def forward(self, p_model_0_weight: \"f16[12, 1, 3, 3]\", p_model_0_bias: \"f16[12]\", p_model_4_weight: \"f16[2352]\", p_model_5_weight: \"f16[10, 2352]\", p_model_5_bias: \"f16[10]\", b_model_0_weight_scale: \"f16[1, 1, 1, 1]\", b_model_0_weight_zero_point: \"i8[1, 1, 1, 1]\", b_model_0_weight_quantized: \"i8[12, 1, 3, 3]\", b_model_5_weight_scale: \"f16[1, 1]\", b_model_5_weight_zero_point: \"i8[1, 1]\", b_model_5_weight_quantized: \"i8[10, 2352]\", b_activation_post_process_0_scale: \"f16[]\", b_activation_post_process_0_zero_point: \"i8[]\", b_activation_post_process_2_scale: \"f16[]\", b_activation_post_process_2_zero_point: \"i8[]\", b_activation_post_process_3_scale: \"f16[]\", b_activation_post_process_3_zero_point: \"i8[]\", b_activation_post_process_4_scale: \"f16[]\", b_activation_post_process_4_zero_point: \"i8[]\", b_activation_post_process_5_scale: \"f16[]\", b_activation_post_process_5_zero_point: \"i8[]\", b_activation_post_process_7_scale: \"f16[]\", b_activation_post_process_7_zero_point: \"i8[]\", x: \"f16[1, 1, 28, 28]\"):\n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " constexpr_blockwise_shift_scale: \"f16[12, 1, 3, 3]\" = torch.ops.coreai.constexpr_blockwise_shift_scale.default(b_model_0_weight_quantized, b_model_0_weight_scale, b_model_0_weight_zero_point, None, torch.int8); b_model_0_weight_quantized = b_model_0_weight_scale = b_model_0_weight_zero_point = None\n", + " constexpr_blockwise_shift_scale_1: \"f16[10, 2352]\" = torch.ops.coreai.constexpr_blockwise_shift_scale.default(b_model_5_weight_quantized, b_model_5_weight_scale, b_model_5_weight_zero_point, None, torch.int8); b_model_5_weight_quantized = b_model_5_weight_scale = b_model_5_weight_zero_point = None\n", + " quantize: \"i8[1, 1, 28, 28]\" = torch.ops.coreai.quantize.default(x, b_activation_post_process_0_scale, torch.int8, b_activation_post_process_0_zero_point); x = None\n", + " dequantize: \"f16[1, 1, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize, b_activation_post_process_0_scale, b_activation_post_process_0_zero_point, None, 0, torch.int8); quantize = b_activation_post_process_0_scale = b_activation_post_process_0_zero_point = None\n", + " \n", + " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/conv.py:553 in forward, code: return self._conv_forward(input, self.weight, self.bias)\n", + " convolution: \"f16[1, 12, 28, 28]\" = torch.ops.aten.convolution.default(dequantize, constexpr_blockwise_shift_scale, p_model_0_bias, [1, 1], [1, 1], [1, 1], False, [0, 0], 1); dequantize = constexpr_blockwise_shift_scale = p_model_0_bias = None\n", + " \n", + " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/activation.py:143 in forward, code: return F.relu(input, inplace=self.inplace)\n", + " relu: \"f16[1, 12, 28, 28]\" = torch.ops.aten.relu.default(convolution); convolution = None\n", + " \n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " quantize_1: \"i8[1, 12, 28, 28]\" = torch.ops.coreai.quantize.default(relu, b_activation_post_process_2_scale, torch.int8, b_activation_post_process_2_zero_point); relu = None\n", + " dequantize_1: \"f16[1, 12, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize_1, b_activation_post_process_2_scale, b_activation_post_process_2_zero_point, None, 0, torch.int8); quantize_1 = b_activation_post_process_2_scale = b_activation_post_process_2_zero_point = None\n", + " \n", + " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/pooling.py:224 in forward, code: return F.max_pool2d(\n", + " max_pool2d_with_indices = torch.ops.aten.max_pool2d_with_indices.default(dequantize_1, [2, 2], [2, 2]); dequantize_1 = None\n", + " getitem: \"f16[1, 12, 14, 14]\" = max_pool2d_with_indices[0]; max_pool2d_with_indices = None\n", + " \n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " quantize_2: \"i8[1, 12, 14, 14]\" = torch.ops.coreai.quantize.default(getitem, b_activation_post_process_3_scale, torch.int8, b_activation_post_process_3_zero_point); getitem = None\n", + " dequantize_2: \"f16[1, 12, 14, 14]\" = torch.ops.coreai.dequantize.default(quantize_2, b_activation_post_process_3_scale, b_activation_post_process_3_zero_point, None, 0, torch.int8); quantize_2 = b_activation_post_process_3_scale = b_activation_post_process_3_zero_point = None\n", + " \n", + " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/flatten.py:55 in forward, code: return input.flatten(self.start_dim, self.end_dim)\n", + " view: \"f16[1, 2352]\" = torch.ops.aten.view.default(dequantize_2, [1, 2352]); dequantize_2 = None\n", + " \n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " quantize_3: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(view, b_activation_post_process_4_scale, torch.int8, b_activation_post_process_4_zero_point); view = None\n", + " dequantize_3: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_3, b_activation_post_process_4_scale, b_activation_post_process_4_zero_point, None, 0, torch.int8); quantize_3 = b_activation_post_process_4_scale = b_activation_post_process_4_zero_point = None\n", + " \n", + " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_5626/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", + " model_4_norm: \"f16[1, 2352]\" = torch.ops.coreai_torch_ext.model_4_norm.default(dequantize_3, p_model_4_weight); dequantize_3 = p_model_4_weight = None\n", + " \n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " quantize_4: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(model_4_norm, b_activation_post_process_5_scale, torch.int8, b_activation_post_process_5_zero_point); model_4_norm = None\n", + " dequantize_4: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_4, b_activation_post_process_5_scale, b_activation_post_process_5_zero_point, None, 0, torch.int8); quantize_4 = b_activation_post_process_5_scale = b_activation_post_process_5_zero_point = None\n", + " \n", + " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/linear.py:134 in forward, code: return F.linear(input, self.weight, self.bias)\n", + " permute: \"f16[2352, 10]\" = torch.ops.aten.permute.default(constexpr_blockwise_shift_scale_1, [1, 0]); constexpr_blockwise_shift_scale_1 = None\n", + " addmm: \"f16[1, 10]\" = torch.ops.aten.addmm.default(p_model_5_bias, dequantize_4, permute); p_model_5_bias = dequantize_4 = permute = None\n", + " \n", + " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", + " quantize_5: \"i8[1, 10]\" = torch.ops.coreai.quantize.default(addmm, b_activation_post_process_7_scale, torch.int8, b_activation_post_process_7_zero_point); addmm = None\n", + " dequantize_5: \"f16[1, 10]\" = torch.ops.coreai.dequantize.default(quantize_5, b_activation_post_process_7_scale, b_activation_post_process_7_zero_point, None, 0, torch.int8); quantize_5 = b_activation_post_process_7_scale = b_activation_post_process_7_zero_point = None\n", + " return (dequantize_5,)\n", + " \n", + "Graph signature: \n", + " # inputs\n", + " p_model_0_weight: PARAMETER target='model.0.weight'\n", + " p_model_0_bias: PARAMETER target='model.0.bias'\n", + " p_model_4_weight: PARAMETER target='model.4.weight'\n", + " p_model_5_weight: PARAMETER target='model.5.weight'\n", + " p_model_5_bias: PARAMETER target='model.5.bias'\n", + " b_model_0_weight_scale: BUFFER target='model_0_weight_scale' persistent=True\n", + " b_model_0_weight_zero_point: BUFFER target='model_0_weight_zero_point' persistent=True\n", + " b_model_0_weight_quantized: BUFFER target='model_0_weight_quantized' persistent=True\n", + " b_model_5_weight_scale: BUFFER target='model_5_weight_scale' persistent=True\n", + " b_model_5_weight_zero_point: BUFFER target='model_5_weight_zero_point' persistent=True\n", + " b_model_5_weight_quantized: BUFFER target='model_5_weight_quantized' persistent=True\n", + " b_activation_post_process_0_scale: BUFFER target='activation_post_process_0_scale' persistent=True\n", + " b_activation_post_process_0_zero_point: BUFFER target='activation_post_process_0_zero_point' persistent=True\n", + " b_activation_post_process_2_scale: BUFFER target='activation_post_process_2_scale' persistent=True\n", + " b_activation_post_process_2_zero_point: BUFFER target='activation_post_process_2_zero_point' persistent=True\n", + " b_activation_post_process_3_scale: BUFFER target='activation_post_process_3_scale' persistent=True\n", + " b_activation_post_process_3_zero_point: BUFFER target='activation_post_process_3_zero_point' persistent=True\n", + " b_activation_post_process_4_scale: BUFFER target='activation_post_process_4_scale' persistent=True\n", + " b_activation_post_process_4_zero_point: BUFFER target='activation_post_process_4_zero_point' persistent=True\n", + " b_activation_post_process_5_scale: BUFFER target='activation_post_process_5_scale' persistent=True\n", + " b_activation_post_process_5_zero_point: BUFFER target='activation_post_process_5_zero_point' persistent=True\n", + " b_activation_post_process_7_scale: BUFFER target='activation_post_process_7_scale' persistent=True\n", + " b_activation_post_process_7_zero_point: BUFFER target='activation_post_process_7_zero_point' persistent=True\n", + " x: USER_INPUT\n", + " \n", + " # outputs\n", + " dequantize_5: USER_OUTPUT\n", + " \n", + "Range constraints: {}\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", + " return cls.__new__(cls, *args)\n" + ] + }, + { + "data": { + "text/html": [ + "
coreai-torch 0.4.0: converting 1 program(s) to Core AI\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;36mcoreai-torch\u001b[0m \u001b[1;2;36m0.4\u001b[0m\u001b[2m.\u001b[0m\u001b[1;2;36m0\u001b[0m: converting \u001b[1;36m1\u001b[0m \u001b[1;35mprogram\u001b[0m\u001b[1m(\u001b[0ms\u001b[1m)\u001b[0m to Core AI\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "name": "stdout", "output_type": "stream", "text": [ "Exported: exported_model.aimodel\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", + " return cls.__new__(cls, *args)\n" + ] } ], "source": [ @@ -955,8 +1094,9 @@ "exported_program = torch.export.export(coreai_model, example_inputs, strict=False)\n", "exported_program = exported_program.run_decompositions(get_decomp_table())\n", "cast_to_16_bit_precision(exported_program)\n", + "print(exported_program)\n", "\n", - "coreai_program = TorchConverter().add_exported_program(exported_program).to_coreai()\n", + "coreai_program = TorchConverter().add_exported_program(exported_program, externalize_markers=markers).to_coreai()\n", "coreai_program.optimize()\n", "\n", "output_path = Path(SAVE_DIRECTORY) / \"exported_model.aimodel\"\n", @@ -965,6 +1105,108 @@ "coreai_program.save_asset(output_path)\n", "print(f\"Exported: {output_path}\")" ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "79b829c0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "module {\n", + " coreai.graph private noinline @model.4.norm_0734ac9a(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", + " %0 = coreai.constant dense<1> : tensor<1xsi32>\n", + " %1 = coreai.constant dense<9.99999974E-6> : tensor\n", + " %2 = coreai.cast %arg0 : tensor<1x2352xf16> to tensor<1x2352xf32>\n", + " %3 = coreai.decomposable.broadcasting_mul %2, %2 : (tensor<1x2352xf32>, tensor<1x2352xf32>) -> tensor<1x2352xf32>\n", + " %4 = coreai.reduce_mean %3, %0 : (tensor<1x2352xf32>, tensor<1xsi32>) -> tensor<1x1xf32>\n", + " %5 = coreai.decomposable.broadcasting_add %4, %1 : (tensor<1x1xf32>, tensor) -> tensor<1x1xf32>\n", + " %6 = coreai.rsqrt %5 : tensor<1x1xf32> -> tensor<1x1xf32>\n", + " %7 = coreai.decomposable.broadcasting_mul %2, %6 : (tensor<1x2352xf32>, tensor<1x1xf32>) -> tensor<1x2352xf32>\n", + " %8 = coreai.cast %7 : tensor<1x2352xf32> to tensor<1x2352xf16>\n", + " %9 = coreai.decomposable.broadcasting_mul %8, %arg1 : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", + " coreai.output %9 : tensor<1x2352xf16>\n", + " }\n", + " coreai.graph @main(%arg0: tensor<1x1x28x28xf16> {coreai.name = \"x\"}) -> (tensor<1x10xf16> {coreai.name = \"dequantize_5\"}) attributes {__coreai_pure__} {\n", + " %0 = coreai.constant dense<[1, 2352]> : tensor<2xui32>\n", + " %1 = coreai.constant dense<[[[[-2.319340e-01]], [[1.127320e-01]], [[2.019880e-03]], [[4.458620e-02]], [[-2.780760e-01]], [[1.681330e-03]], [[-7.000730e-02]], [[1.756590e-01]], [[-1.352690e-02]], [[8.386230e-02]], [[-1.951600e-02]], [[-9.704580e-02]]]]> : tensor<1x12x1x1xf16>\n", + " %2 = coreai.constant dense<[1, 0]> : tensor<2xui32>\n", + " %3 = coreai.constant dense : tensor\n", + " %4 = coreai.constant dense<2> : tensor<2xui32>\n", + " %5 = coreai.constant dense<1> : tensor\n", + " %6 = coreai.constant dense<1> : tensor<2xui32>\n", + " %7 = coreai.constant dense<[0, 0, 0, 0, 1, 1, 1, 1]> : tensor<8xui32>\n", + " %8 = coreai.constant dense<0.000000e+00> : tensor\n", + " %9 = coreai.constant dense<0> : tensor\n", + " %10 = coreai.constant dense<0.000000e+00> : tensor<1x1xf16>\n", + " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", + " %12 = coreai.constant dense<[-1.964570e-03, 1.525120e-02, 1.785280e-02, 2.195360e-03, -7.064810e-03, 1.364140e-02, -4.711150e-03, -1.352690e-02, 5.867000e-03, -1.493690e-04]> : tensor<10xf16>\n", + " %13 = coreai.constant dense<3.353120e-03> : tensor<1x1x1x1xf16>\n", + " %14 = coreai.constant dense<0> : tensor<1x1x1x1xsi8>\n", + " %15 = coreai.constant dense<\"0x2920D0FB2FD22255AEEFBEFF313BF202142C0DD5BDD5DB1314F55A88353C29FDB74431C4ED33159A460D902752470C9F44C6C3B49E501FECEF9E9F27CF564CBD01C6EDFCFAB54BF1DEF2AF59AC4ABBDDC94E44AC1EC2C6F2D3118EBF811102F5543E520C383111053EDD80F8\"> : tensor<12x1x3x3xsi8>\n", + " %16 = coreai.constant dense<1.194000e-03> : tensor<1x1xf16>\n", + " %17 = coreai.constant dense<0> : tensor<1x1xsi8>\n", + " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", + " %19 = coreai.constant dense<2.276610e-02> : tensor\n", + " %20 = coreai.constant dense<0> : tensor\n", + " %21 = coreai.constant dense<1.881410e-02> : tensor\n", + " %22 = coreai.constant dense<2.760310e-02> : tensor\n", + " %23 = coreai.constant dense<1.040650e-01> : tensor\n", + " %24 = coreai.constant dense<0.000000e+00> : tensor<1x1x1x1xf16>\n", + " %25 = coreai.blockwise_shift_scale %15, %13, %14, %24 : (tensor<12x1x3x3xsi8>, tensor<1x1x1x1xf16>, tensor<1x1x1x1xsi8>, tensor<1x1x1x1xf16>) -> tensor<12x1x3x3xf16>\n", + " %26 = coreai.blockwise_shift_scale %18, %16, %17, %10 : (tensor<10x2352xsi8>, tensor<1x1xf16>, tensor<1x1xsi8>, tensor<1x1xf16>) -> tensor<10x2352xf16>\n", + " %27 = coreai.quantize %arg0, %19, %20, %8, %9 : (tensor<1x1x28x28xf16>, tensor, tensor, tensor, tensor) -> tensor<1x1x28x28xsi8>\n", + " %28 = coreai.dequantize %27, %19, %20, %8, %9 : (tensor<1x1x28x28xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x1x28x28xf16>\n", + " %29 = coreai.pad %28, %7, %8 mode = : (tensor<1x1x28x28xf16>, tensor<8xui32>, tensor) -> tensor<1x1x30x30xf16>\n", + " %30 = coreai.conv2d %29, %25, %6, %6, %5 : (tensor<1x1x30x30xf16>, tensor<12x1x3x3xf16>, tensor<2xui32>, tensor<2xui32>, tensor) -> tensor<1x12x28x28xf16>\n", + " %31 = coreai.decomposable.broadcasting_add %30, %1 : (tensor<1x12x28x28xf16>, tensor<1x12x1x1xf16>) -> tensor<1x12x28x28xf16>\n", + " %32 = coreai.relu %31 : (tensor<1x12x28x28xf16>) -> tensor<1x12x28x28xf16>\n", + " %33 = coreai.quantize %32, %21, %20, %8, %9 : (tensor<1x12x28x28xf16>, tensor, tensor, tensor, tensor) -> tensor<1x12x28x28xsi8>\n", + " %34 = coreai.dequantize %33, %21, %20, %8, %9 : (tensor<1x12x28x28xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x12x28x28xf16>\n", + " %35 = coreai.max_pool_2d %34, %4, %4, %6, %3 : (tensor<1x12x28x28xf16>, tensor<2xui32>, tensor<2xui32>, tensor<2xui32>, tensor) -> tensor<1x12x14x14xf16>\n", + " %36 = coreai.quantize %35, %21, %20, %8, %9 : (tensor<1x12x14x14xf16>, tensor, tensor, tensor, tensor) -> tensor<1x12x14x14xsi8>\n", + " %37 = coreai.dequantize %36, %21, %20, %8, %9 : (tensor<1x12x14x14xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x12x14x14xf16>\n", + " %38 = coreai.reshape %37, %0 : (tensor<1x12x14x14xf16>, tensor<2xui32>) -> tensor<1x2352xf16>\n", + " %39 = coreai.quantize %38, %21, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", + " %40 = coreai.dequantize %39, %21, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", + " %41 = coreai.invoke @model.4.norm_0734ac9a(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", + " %42 = coreai.quantize %41, %22, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", + " %43 = coreai.dequantize %42, %22, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", + " %44 = coreai.transpose %26, %2 : (tensor<10x2352xf16>, tensor<2xui32>) -> tensor<2352x10xf16>\n", + " %45 = coreai.decomposable.broadcasting_batch_matmul %43, %44 : (tensor<1x2352xf16>, tensor<2352x10xf16>) -> tensor<1x10xf16>\n", + " %46 = coreai.decomposable.broadcasting_add %45, %12 : (tensor<1x10xf16>, tensor<10xf16>) -> tensor<1x10xf16>\n", + " %47 = coreai.quantize %46, %23, %20, %8, %9 : (tensor<1x10xf16>, tensor, tensor, tensor, tensor) -> tensor<1x10xsi8>\n", + " %48 = coreai.dequantize %47, %23, %20, %8, %9 : (tensor<1x10xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x10xf16>\n", + " coreai.output %48 : tensor<1x10xf16>\n", + " }\n", + "}\n", + "\n", + "{-#\n", + " dialect_resources: {\n", + " builtin: {\n", + " resource_13056670969290235296: \"0x10000000003C003C003C213C4F3C403C4E3C333C353C463C5B3C4D3C103C003C003CEE3BDF3B4A3C543C4C3C1B3C483C133C2A3C303C4F3C373CFF3B003C0E3C143C0D3C383C253C173C133C143C263C083C3A3C453C0A3C113C133C103C363C1D3C1C3CE93B153C173C033CCC3BB93B263C383C173C193C0A3CF73B733C3F3C193C073C4A3C743C573C153C583C3C3CE83B1C3CDA3B823C993C853C743C2A3C813C723C813C7E3C4A3C4F3C0B3C163C533CB23CAB3C5D3C713C223C813C6B3C5D3C8F3C803C543C0E3C023C253C703C773C603C4A3C413C463C3D3C263C373C233C523CEE3BFD3B2A3C403C7B3C773C3D3C2F3CFF3B0C3CEB3B1B3C203C533C133CE03B353C3A3C323C7A3C7F3C2C3CD13BB73BF73B013CF83B413C063C2E3C273C4E3C2B3C5A3C573CC33BE43BF43B073C1F3C123C123C003C0B3C2B3C233C093C113CD73BC63BB23B103C0F3C263C083C073C003CE93B023C633C403C2C3C233C393C2F3C193C063C2C3C1A3C223C003C003C233C333C723C3E3C6F3C693C463C3A3C333C1F3C493C003C593BB63B7E3B2A3C2D3C573C333C273C263C393C463C283CA73BCD3B8C3BD23B373C183C283C393C1E3C033C1B3C1E3C413C523C403CCB3BA43B1A3C293C183C0D3C0E3C213C0F3C073C0F3C1A3CF53B533CD63B013C4D3C173C0B3C1D3CE63B293C2C3C3D3CDB3BE63B053C443CDE3B153C1C3C0A3CC03BFA3BF23BF03B293C0F3C263CF73B393C6A3C213C1F3C2B3CF23B1B3C0D3C003C253C193C1A3C243C163C293C733CEF3BFA3B233C413C153C013C303C263C0D3CFF3B213CE73B173C3A3C013C7C3BF33B293C343C063C1F3C263C163CF43B1B3C283C203C233CE93BF53B3B3C0E3CD53B043C1D3C243C0E3C123C003CED3B223C2F3CF93BD23B213C193C193C273C293C0A3CE03B0E3C0D3C043C233C323CFE3BA63B2B3C073C193C1D3C083C173C153C0C3C273CFD3B203C303CE23BBA3B343C133C0C3CE33B0D3CDE3B003C123CD93B143C163C1D3CE23BA63B243C5A3C4A3C603C4D3C403C603C3B3C243C123C263C0E3CD73BED3BEE3BE13BD53B063C063CE63BF73B033CD03BCB3BCD3BC93BF93BE03BE73BF53BFC3BF23BEC3B073C053C023CE93BF53BD73BEE3BE23BE13BF13BEC3BDF3BFB3B153CE23B0C3C063C173C0D3CD03BE03BDF3BF63B043C0A3CF03B023CD63BDB3BEE3BEF3BF33B053CDF3BEB3BDA3BE73BF33BD13BD63BD93B073C153C163C2B3C223C573C3C3C033CFC3BFE3BFC3BEC3BE73BF93B1D3C2C3C023CF83B3C3C443C323CE13BD53BFA3BD93B003CAD3BD43B4E3C373C2D3C293C183CFE3B053CED3BD93BE13BFD3BE03B243C233C1E3C1F3CFE3B213C073C1E3C273C083CF33BE33BCC3B053C203C263C143C173C353C083C1E3C0B3C243CEA3BDF3BE03B143C073CD53B243C163C233C583C2E3C203C263C0E3C103CD93BE53BD43B023C2B3C1A3C0B3C1D3C1C3C073C183CF43BF93BEA3BDD3BED3BFD3B0C3C023C0F3CF53B2D3C343CF83BF03B113C093CE33BED3BDD3BFB3B1B3C203C463C193C1A3C083C093C003CF83BE43BEB3BDE3BF83BFB3BF33BEF3B113C023C133C1A3C113CEC3B083CF23BF93BF63BFB3BDA3BE43BD13BE03BCE3BFC3BF43BC43BF13BDE3BDE3BED3BE33BE93BE93BDD3BF03B0D3CD33B143C243C0D3CF03B073CFB3BD63BDE3BF13BCE3BE43B2E3C363C0A3C0C3CE83B1E3CEC3B323C123C3A3CDD3BE73BFD3B103C173C143CE93BF43BF63B033CDB3B003C213C4A3CE63BF33B263C503C163CFC3B113CED3B093C1D3C003CE63B033C293C413CEB3B363C3C3CE23B0E3C283C1E3C393C1B3C3A3C1A3C193C413C733C003C553C233CF43B0C3C343C2A3C223C2D3C1A3C123C223C563C303CF93B343C013C233C2C3C3E3C463C033C2B3C353C0F3C273C383C383CEC3B153CEA3B0B3C1F3C443C343C263CE43B2B3C183C123C313C473CEE3BE63BE63B0E3CFE3B313C3D3C023C093C113CF13BD53B243C523CC83BD33B1B3C013C103C1F3C303CF03B113C113C0F3C0A3C213C1D3CF43B413C123C153C013C223C083CFE3BFF3B0A3C0B3C1E3C313CEF3BD33B123CFB3B083CF03BCC3B1C3CE43B133CFD3B093C053CFB3BA73BF03BD83B153C003C063C193C243C343C263C1D3C183C183C103CB33BD03BEE3B013C223C113C343C273C1B3C243C213C073CE33BD13BC53B003C053C363C293C6F3C383C273C0A3C2F3C513C533C213CE03B003CF73BCE3B343C323C2E3C313C1E3CDD3B2E3C3F3C633C023CC43B0C3CF73B2E3C333CCB3BEA3BF43B0A3C233C2D3C3B3C203C2E3CF53BDE3BE23B263C093CFC3B113CF53BDC3B003C273C1E3C343C243C0C3C013CF83B163CB33BEF3B2C3CF03BF73B263C3E3C563C643C223C2B3CE33B473C183C083C513C513C393C2A3C3B3C6A3C4F3C493C493C2A3CFC3B3C3C043C573C703C5D3C603C4C3C2A3C2B3C503C4F3C643C3C3C0C3C1A3C073C2F3C413C2D3C2D3C433C173CE23BE63B223C593C1F3C1D3C313C133CF93B2E3C2B3C073C143C133CFD3B073C2D3C4D3C143C093C033C453C143C0B3C3B3C5E3C283C083C183C0F3C3B3C1A3C0F3C123CFD3B423CFB3B123CF63B533C223C063CE63BF53B183C0D3C073C003C193C383C113C1C3CFA3B053C113C113C153C2E3C143C253CD73B0B3CE43B433C283C4A3C133C023C1A3C133C373C223C413C223C0C3C003C003C073C463C2E3C523C363C5C3C593C123C4A3C323CFA3B083C003CCA3BC83BCF3BD13BD93BCB3BEB3BD13BF53BCF3BDA3BCC3BF33BE43BAD3BF63BE53BE13BE63BDC3BFC3B0D3C093CDD3BDE3BC13BE23BD83BE43BE83BE73BE33BC13BF63B033C9D3C713C173C333C183CC93BCD3BEA3BE33BA13BEB3BC03B323C843C8A3C743C833C4D3C1B3CD93BE53BE23BEC3BFF3B0B3C4A3C873C783C7A3C933C613C343C093CEB3BF33BC03BDB3BA63B1F3C753C503C4C3C513C8A3C823C573C3E3C963BED3BC63BB93BD13B3B3C5F3C823C7B3C6C3C6E3C443C5B3C583CDA3BC93BDF3BE13BFB3B1D3CA93CBB3CA13C963C213C523C3B3C3A3CF93BCC3BE93B033CC73B283C793CBB3C2D3C653C4E3C0E3C2F3C253CD83BDA3BCD3BE23BEC3B083C683C4E3C203C7C3C093C313C183CE73BE33BCC3BDE3BC93BE43B0C3C493C383C503C183C113C2B3CE13BD23BB83BDD3BCF3BF33BE33B2C3C343C393C0A3C183C113CE43BD53BC63BE53BE63BF53BE63BBF3BDF3B0C3C0E3CEA3BFF3BEF3BD63BFC3BC43BC23BD53BD63BF03BE43BDB3B043CF33BF83B113CF83BE43BDC3BDF3BEF3BEF3BFE3BFE3BFD3BFF3B1A3C2E3C223C1F3C223C0A3C2E3CF73B013CEA3BFF3B033C0D3CF93B1A3CFD3BF13BE63B133C0E3C653C183CFB3BCD3BFD3B1C3C183CDB3BE33BFA3B0E3CFC3B1B3C513C2C3C7C3C273CDA3B053C333CB93BAC3B0A3C053C213C0C3C213C433C743C8D3C673CE13B1D3C073CC53BF83B013C153C3D3C2D3C4A3C6B3C3F3C673C783CCF3B073C123C0D3C123C1F3C473C533C2C3C623C833C7F3C5F3C693CCA3B0F3C0E3C103C283C2E3C123C433C243C4E3C583C7B3C513C593CCF3B033C213C143C253C323C2A3C373C633C123C233C363C523C413CFE3BE73B073C043C243C5A3C6C3C263C0A3C193CEF3B1A3CDC3B2E3CCF3BE83B2D3CD03B0F3C2C3C333C0E3CFA3BE23B023C133CE83B2B3CE03BF73B273C0D3CD13B953BEE3B163C073C253C0A3CF03B083C0B3CE23B003CCF3B233C103C2E3C173C2A3C3E3C5D3C323CF43B023C033CE23BFB3B153C2A3C5C3C6D3C3A3C3B3C213C353C0C3C043CF53BFA3BD93BDD3BD33BE23BEF3BD73BEE3BEB3BED3BE43BD23BCE3BCC3BEB3BD93BED3BD13BDA3BE03BE03BEE3BE43BF73BDE3BE03BDB3BC73BCE3BF03BF53BEF3BD53BD83BEE3BEE3BDD3BCE3BE03BE03BD23BDE3BE23BD03BE03BE23BC13BE93BB93B013C1A3C2A3C203C203CCD3BE03BD03BE83BD43BE43BD53BEC3BF43BDB3B2B3C2E3C543C293C0A3CCF3BC73BE63BBE3BD13BC63BF43B0E3CE13BEA3B263C473C463C0C3CD83BF93BF43BD43BDC3BE43B073C293C493C333C0B3C593C393C153CF43BF73BCE3BAA3BE43BE73B273C493C8B3C9B3C0C3C593C1F3C143CFA3BBC3BD93BE93BF33BF13B113C503C7C3C823C753C303C253CE43BFB3BEF3BCE3BEB3BD13BDF3B153C553C4C3C4F3C453C283C043CFE3BC33BF63BD03BCE3BF43BF43B0B3C503C383C393C1B3C2F3C123CBC3BD93BEA3BE43BEE3BC63BBA3B173C383C493C523C643C173CF73BEB3BE73BCC3BC43BC83BD23BE23BF53B093C113C353C233CC23BDB3BDB3BDF3BDF3BF13BF43BBE3BD53BFE3BF33B0A3CEB3BD73BF93B003CE23BCF3BD73BE33BED3BCB3BEA3BEB3BC13BF43BEB3BD33BCC3BE73BDD3BEB3BE13BCC3BD83BE73BC83BD23BCF3BEF3BC83BE13BD43BE13BC33BD93BDE3BCE3BD53BD03BD13BEF3BDD3BF83BE43BF63BD23BDD3BD93BE93BD33BCF3BD33BEC3BF43BBB3BF03B0C3C0F3C0C3C143CE83BDE3BAD3BF13BD83BDB3BDE3BF43BC83BEC3B143C8B3CA03C893C523CFF3BC93BF43BE83BDC3BCD3BF33BF43BF73B0D3C6C3C863C723C123CD93BD23BE33BF03BCB3BD93BE03BAF3B043C283C293C2D3C413CF13B083C033CDA3BD03BE73BE03BD13B0C3C263C6B3C7C3C513C523C063C023C023CE93BB93BF93BEC3BDD3B253C323C753C843C9A3C873C2B3CDC3B043CF03BD13BD83BD73BCC3BD43B193C203C763CAC3C5C3CB43BDC3BF23BC63BED3BE93BD63BE33B063C243C4F3C3C3C5B3C2E3C023CFB3BE13BE53BB73BE73BDC3BCF3B113C073C403CB13C7A3C183C093CC43BE63BC93BB23BE43BCF3BF73B043C0A3C5F3C723C153CEF3BEB3BF63BFA3BD93BE83BD13BD33BEA3BD93BE53B013CE03B043CEF3BC33BC93BD63BA43BF43BDA3BBA3BEC3BE63BCF3BF03BEE3BDE3BEB3BD23BE03BE83BD23BD83BCA3BC93BDB3BE13BC83BCC3BCE3BD03BD33BED3BD03BF13BED3BD93BDD3BD83BDE3BEA3BD83BF63BD63BD23B053CE43BC23BE43BEF3BD53BCB3BEC3BDF3BE73BD63B1F3C0E3C0B3C383C313C123CD03BCC3BDD3BD73BE63BD93BFD3BC53B0E3C1D3C493C343C2F3C543C303CEF3BE13BD63BCA3BED3B053C343C503C133C243C123CFF3B143CFA3B1D3CE83BCE3BE93B033CFD3B263C183C163C0C3C073C213C333C193C063C183CD83BDB3BFA3B323C0B3C073C503C233C303C3A3C4C3C1E3C013C053CD33BD93BE03BD43B633C4E3C343C323C373C3D3C343C1F3C003CC63BDB3BE23B0A3C3F3C733C623C4A3C213C153C103C263C083CC43BE33BD23BDF3BEC3B243C643C673C2A3C1C3CE43B003CE53BF83BE53BF33BD93BEC3B043C1B3C4C3C393C353C133CF23BBF3BE33BDF3BEE3BF33BE03BD33BDE3B093CF63B143C053CED3B083CDE3B0E3CD93BEC3BF63BF43BC83BEC3BF13B073C023CF63B083CE83BFA3BC23BF33BF43BEA3BE23BF13BEF3BD23B253C203CEE3BE53BD93BDA3BD43BDB3BDA3BF43B003CF73BEA3BFB3BF63B033CE63B0B3C043CDB3BEA3BDC3BE13BEB3BF53BED3BFD3B033C933B0B3C163CAA3BEE3BB73B083C103CE53BEA3BFE3BFB3B023CCB3B123C093C133C213C083CD23BEA3BFF3B003CE63B033C083C0C3CC53B103C2E3C403C763C6A3C383C283C363C213CF23BF93BF93BDF3B2B3C263C373C3F3C733C673C663C7B3C643C1E3C033CE33B053CF23B3F3C453C413C353CAB3CB23CA73C853C3E3CCD3BF63BF03B093C2B3C6E3C683C603C763C643CB03C743C8A3C353C203CFE3BE93B113C543C5E3C443C5D3C633C3A3C6A3C613C3C3C383C113CEE3BE63B183C353C4A3C7D3C943C723C373C553C6D3C4F3C703C153C023CFB3BFD3B473C8E3CA53C853C933C6D3C413C493C553C593C053CF63BF63B053C313C3F3C503C503C603C7C3C283C853C883C513C0A3CEC3BED3BE23B3D3C503C533C463C5B3C933C4A3C453C2D3C113CEA3BF83BF73BFC3BF63BFF3B303C2C3C3F3C3A3C343C083C0A3CF83BE53BFE3BE73BBD3BCF3BBC3BCC3BDB3BDA3BD53BD73BEE3BBD3BD43BDE3BD63B303B353B5A3B803B573BA63BFE3B753B5F3B503B6A3B353B733BA33BEB3BDE3B2A3C563C313C623C283C3A3CEE3B243C3A3C3A3C053C4E3BEE3B003C093C0E3C2F3C483C173C403C0D3C103C103C443C253CED3B0D3C3D3C263C2F3C213C243C463C483C493C3A3C273C193C3F3C143CE53B283C303C0C3C193C213C373C323C3F3C183C0E3C373C483C3D3C423C133CED3B1A3C193C043C183C2C3C253C1F3C1C3C263C833C643C3E3C0D3C373C3C3C013C353C343C2F3C1B3C0E3C283C363C3E3C453C373C0C3C373C313C213C4F3C6A3C5B3C283C193C063C243C483C3A3C343C283C293C463C273C223C303C243C153C373CF03B153C4F3C4B3CF33B293C023C0C3C363C083C1E3CEE3BE23B023C0B3C243C333C323C063C113C2C3C2C3C273C2C3C173C123C0D3C1C3C0E3C283C093C1C3C313C2F3C123C173C183CDF3B063CF73B003C073C1E3C253C0F3CEE3B5B3C243C4E3CE93BED3B173C193CD73BC63BD43B123C293C0A3CA83B003CD53B443C5E3C653C443C573C4A3C2E3C463C3A3C253CF23B643B\",\n", + " resource_17846777755324596689: \"0x1000000011F40AF8E2CEDCC4DBA9C7E1D70EF10AE4D3F3F30D01EDE5E1E2E2F3FB02D6E208F9110DFEF2E8FBD7D6FCEAEE02FE080E13090B1013FCC8FAE2F3FF06F803101F3720141BAF08E5E010151A1707FF272B3525D2FFEBDB2A250E27DCD016142F3DF0E6FB0E29184304D3DC0B082D2FD3FD0C1323363A06C9E8FFF32836DF01F908351C3427DEF5F3F70610D6F4FCFD0D1C2E1106FBEBEBF5E4E1F0DDE30107071B06F2D7DA00EBF0F707F1F0EBEBEAD3CCBBD4C9C4E4F0F7CACBB6B6AEA4B3ADD8C9DFF5FE091501D5E5CBDFDFD3DBEDF8FCFFF6CFEF06EAE5FAF0E0DEE4DDFE0AD5ECE5F0EE040502FDF703D904F1E7FAF80708FC060A0818FB02F60EED03F3F10015141C1A0D1C13FC05D70A130F0BF1E1D8010323190B02F10AFF1705EADAE8F2FC14260BF0F7140D13EBD9D7DFFE0A0E0EFE090618FE0603E2DBEFF7021BEFF0F9FD08190C17F7F8FDF501FFD9EFEEE71013141A120D0AEAF1DEE5FDF5E104F8FD1110FFF4F5D7F3DDF203E1FDD9C8DBDBE0C0C9D9BFF2FAFD04FFFC0D03F5FD100EF602F308F9FDFE03EDF9E8ED03FC07050B0500F604F9020501F6F5F7FA02F50209F7EDF2EC02020600F9F9F0EDFE07FAF5F7F10907F3F3F1DCE608F0F8FBFCFE04F5F4DCE9D1E3E80B08F1E801FD0B06C3C5D2E2EEE6EE000AEA04110EE7D2DCF2EDD8E3EFF6000E040EFAD1D80509FA01F7FC06FC0616FEEDD70F271B050EEDF302FB12E9DFEAFA221C0F06FBE602F40B00E3EAE5F00100070D07FA0D0908F7F2F0CFD50705FB06080CF104FBF9FDEAFAF2DC00F81312FDF0FAF5F7FF05040401FC0C0D0406F30D081005F8F0FA09E6E0E6E6F5F20AFCF504E6F60D0EF500F8FDF4FCFCF1F2F1F7EDF4F71110080317FAE10C01F7F1EFF20CF90C1D13FD0EEB0C03EDE8EEFD0115091F171115BF11F7F20E060301FFEAFC0B132FE00BF7EA17020D0FEBD3E2FC2027F8F9ED08041D1F05D7EAF1030E2BF9F0D5FE190303EDF20807041400D50601FDF9080BF7F713090604F104FDEF0509091A0AFDFE0CFFECF2FA00F816F5F51E0F040605E0E9EAFEF0F30709041906E2D4C0D0DEFAF611010AF7F0E4D8ECF10105F4F7F30409E5F3C1D5CFD4DACBF6F9E5FFF1F9D9E8FDEE02F100EBFAFEF1F1F1D0E3E4F6EE051619FD13E5DE08F5E9F4EAFC09031C1A031522D4ECF0070D0E0F0A1B1B2619291FFEF2EFDB140E0C1508F50F30282305F8EBF017170403DADDF7192E1A35EEFEE81D130709D7EA08FF0B3817D4EF070D111CFFDDEFF413102A0CFBF8F60A1F1521DBDEE5FC0EF8FCF0FBF007071121F9F1E7E8E6DEE6FBE5C5FD0C181808F6D7DFF2D3E40CFEE6ECE3EEFA05EEE1D6C9F1EC02F2F3C8DDE6E2C6CBCCD5CDDFEB000A080900030C040DFF1101FF11F8FDF4FBFD04FDFAFF0105F5100C05FDF10F0CFFF81803FBE7F6DFF4FDF7FAF8030900F402E9E2D4E800EFF70B0A0AFD150CF5C6CBDCD00504F1FEFAEF002EF714FBEDE2DC00090AF213092B19363C22EFE4F40AF1040101FB0C193949061B0CFB0AF9100203F2E814283A091D11F81C0E0309EDEBE5171A0F19261A0516120CF0FEDFE5CEFD2E2A190D190C0FF5F1FFD7F2F4060DF6F3FE0BF0F60E04050F020DE6EAE4EEE6F6060F050C0CF0F0F9FEF7EB07F5F20BF50B0AF6EEEE04E2E1F3F60608F4F4F3FCFCEEF600040A0804E8FCEBF60AE70002FDF909050FE6F0E4D2FD06E5F5F606EEF50218E7D9D2F40F020B0B140AFFFAD9D7E7F2FCD7F502E1FB0007FAE5D9E2FE0518E50AF3E81B111E02D0CB0FFF1D11F40D08ED230C27F5C7E322002D27E7FDFD06110F1AF5EE0E0518211CF1040A121AECFD15010406FC11F9FD05F002090A00F7E709F1EC06FD0911EFECF6EFE6FDE8EAD9EDEDF2EE06EEFADFCBCCD6E8EAF1EDF20CF11104F0120C03FEF6EF0703FF080305F50907FDFBF40AFB0D10F70010F6FEFCF00F03F308160603F40910F4F80EF504031107FEF50A0C0F10FDFEF0F4F9050B0807F2F5FEF30A11F10A05FFFA12F4FCE3CDEE02F9F4F60AF8FF0402060504CDDFF8EDF8FE06FFFBFB101D1D06E9DAE200F40EF3ECE0DCE3223A1607F6F702F7F502F0DCD6DE0F1B28FEECEFEC04F00803ECE2F4070A08F8F2F104F3FD0FF8DDF0D7F505211F0F0D100C050709FFE2EFE3F30612FE02F201FD0309060D1015100B16020FF30701F5F501F6F90000121008F4070DFAF6FFFB0CF907FFF40FF3F2FB08F8FF0B0E090F070FFA0AFEFC09F309F40E02FD070C01F6F5FEF6FC0709F7FD03F90DF7FECCE7E1E40A0D05F101F4FF1A00EBD1E9E1F50706FBFD07040FFF1C05F7F4D5E50E0608F5F700FA032320150B03EC00110200EEE102FA262B2A0DF3F2F010FAF8F7F2F4F9272E2300F6EC000AF60005F0E6E0061702F6EDF9FB12010BFAE9E4CAD4FF07F9FE110B05FFF8EFE5F1D6DFFA1100FF00F9FD0408080C130EF5100202FC0DF1080AFD0F02FC0717090FFE1105F1F7F0FAFFF3030905F1FF0AFC02F201F4F30AF81204F4FB0CFE02F7F510F7F0F50C0EEEFB08EDF1F5FEEFF8FC03F2FEF7E0FFF5D7F5E5EFF60E0DF4F901E1F9F8F0EEE4E8F90A0BFE0CFDF0101AF806F8E8EC0F14FD1100F9FD0FFC2334EEFD0DFB1EF1F5F2ED021615341FE5F215171BF10F010F0B13262DDFE40A11110DF6F10DF9F7011B10F50414FA0712FCF2FBE2FC01F21E141FFB0D00F1FD03FD0BF4EA0901FD02F9F9FAFC010510F502F60201FA0303FBFFF501FCF1F20AEEE7F7DFE5EFFE09F0FE0503FEFF09FAF1EE00FAF403F2FFF8FA040EF504FEFEF302EFF60504F3F1EFF8E509F312F31308FDF60D0BF8FE0306FBF10DF700F6EEF9EC01FAFEFDE8FBF0F3DBDFDDD9FF04F7E8FC00F3E9B49CAEB9BBE0FE0C02010E0A00C2B2B399A1B1D5F40DF1F2F3E0D1AD9AD3E1DCD3CAF2F703F6F3C5B5B4FD1118E8D9CDF1F80CF9DBB2C5E416170D04FCEBEC09FEF8D5E3F2DB0716070BD7EFEF0DF304EAD0ECF10B1128F60CF4FD0CF1100FF0ECE6E50712F507F5FF07F50C0704F7F415F90A04F503FC12F903170EF70AE805FCF6FEF5FAFAF0FEF604D3EEF4DEF0EDE9E7EEE7F1EEF8F500F203FA08ED03F1F0F9F1DAE9E7FA020AF8FE171901D3D6F5FDE6E1FFFA0E1E150A040EDFC1F9E6FCF1EDF1021512221517FABBFEEFF6F1FAF7E2EAE2FB1D1208E8EDFA09FEF5FDC4D0E70000201BFDFFFE1C1413DECADFEA04F9080FE4F8FA030823F4D1F1F912FA110FD8EB081E001A1916F6F7F7F806FBF7E1EA1B150F0523090A04F9EFDC10E3D2D6EFFD1215F3DFC9E7E0D6FBFAB8DCCABCC0C8ABB9AEBEDFD80507EF02DFF6EDFB1A160200E8E8FFF3F4EDFD0918FC2823FF1201D9DD10000FEDF01E0C111C12101F03CC07E3F4EEEC00040A04F30811E2CE05EFF3E0DEE8EF0F10190BF7C5E3F1FAE3D5D7E6F124210DFADFB7DBF3FEF4EAF1D6E5142801F0FDD2CFE70FF5EAECD1EC241DE3E0E8D9C0FEE8C2DBE3EFFC18FAF4F8ECE4EE0FF4DCCEE4071501F8F410040C0CF5F0EA0F1512FCF2101B16FE14160BDE0E0F27010311071D19FCE90FFEF3E701ECE2EDF4F40809DEE2FE0D02D3DFD8DBD6DED8DCF2DEE20A02F70309F2E3FD10F4EFF9E2F1F90B050BF1F3FFF7F2FC1001ECC90A1915FBF0DEE7F00901F50D16E006FC07F1E9E0FF06FBEE03FCEBE90E11F4E0FDEAF014100FF6E9D4CF05F1FCF5DFFCFC08070CE9E0D4BE07070BE4F4F9FCFD03ECF4E0F1C9F1F701E7ECEEF41718F6E4E0DAE7100CE6D3EDEFF009FFE4EAECF1EBF90AF3E6FBF0F90406030AF807030512FD00120BF7F4EB0C091610F812150206110CF106030601F300E61518E4F7EBE8E0D9DBE1E40CF7F7F916120C08FAF702F71106FD09020EF5FA0A0DFCFF1A1708FA13FB0D13F60C0EF90A030A121718F701F4020FFDFC10F0E2F9F30D000706F8FA02FEF6FCE8E1DDF1F809F2FB04160DFB0DF5FD01ECFCFBE70704F7F614F60AFFFEF80FDDD4F1160A0FF70511F009FAF3FBEAE0F605F91205F8F8F4F8FDFF00D0E6F9FDF6F7F6FE04E5081206DCC6EE0417060EF5FAFAFF0E12FDE2E0FF201011FE1113021C081CE8EFC2E80F13060310FB130CFEFDF7DEE3E50808FE10011403090CF1FA0CFA0F101703111213FF00FA13F81210F616FDF80B14150EFDF412FB111116FD0F0FFCF615040512141AF9F90AFD06F5E5EAF50D00F6ECEBEF11F1F90F19FCF4151600ECE1E8FAEFEAF4FBEEF2DEFDFA00FBEFECE5FC00F802EFE3FDFFF108FDE7E1E312F5ED02EAE2051308FFFCECEAF60F05E7E3E1E6E80508FEE3FED70317F1D6D4D8FFF114F5F2D5E6E3EA0FE8E5EEFAF113030AD0E5EAEAF1EBDE020E1414050A070406FBF5F9F6ECFB1C1107F80407000AFAFEECE7F3F909F3070F16F415F5090AEDFBEB0AE6000E08F6090105F8F9F5F2ECF70A1407F7FBF5E6EBDFDA0306F0F4E7E9F2F9FF0FEBFAF2E418040019F2FAE905F40FF8ED00F9000D0C1A1516DDECF510F3F2EBED00F300010304DBFBFBF4EB06E8070507E9E502EFF1FEFAFAFEEA02081020FBE3F7E9ED01D2F8E1EFE4E11B0CFEE7F7E2D210F803E4FFEAEA1411EFF6E1F5F3FC00DED1F6EC05080DECF9EE02E2F708D3E2F9EFF71A14E0F9EBFBEC12D906F3FDFE04FF00FBF4F90A0610F80A0A01050A0E1A0E1C0EF1031D05C0FB01EDF9F605020BE7DE0502FCE6CEDFD5E6F9D5F4D2F0B203F601021200F9FE100310FD03FA110B010F03F81006061A1606FE09FD0318FA0CF8FB0F150F1E05FC13F5FF0E10F509F1FCEBF01821150C120A0A090B070E05E7D9EFFB1802F91304F90B0A06F0F3DBE6141600030AFBFCFD0C080714C6FD10FA130F06FD060F16101EF2F0121F0B0F0F03161005FF1700F90E1EF4EE0DF8041314040D1B01010CFAD5EBF7FB00FBFD05FF230705DDDCEE0406F707F80E080D211BFFEBFA0F18160F11170DFDFD090413FFF717160B0EFC1115FF09100B0DF9FCFB09080F0C1411FE1204FE040113F40BF4020C0101F8130DFC0F09060D0708EF0E0FFF0FF6F2F0EBF00C230403F6F50AF9F7F6E7E8E4E9E5F2E5DDE9F50BF9F5EAEB03EFE2D4CBEFF1020CF308EEF5FDEB10FDD8D6EF09F5000F08F7FADAE921F2DCCDF4F8E90C0F01F3F3E50102D7E6D2EBE7F9170D02E3E900FC04EDD9EC0B1514FE07F7081114EFF5E7F8F601FAF6F61110230D02FDF2DAE3EEF00D081609FC080B2109FCD7FE06FF0B070D0BF0EC03ECEFF7F8141419F90AF907F8F703FD0E0706FAF8FD010CF809F8F908FF0AF8140AFC020405141413FAFF030DFC1702030C021100FD0E0D12FE05081C09161406F90B080015010D08101222161500040403FD1215140E080C0C111C0B0018030905021112F6F80B071C1506F9FB0FF7020D1BF90CFF061E0800121517F6082121E7FB140E011218FC05FD090E1212EFF21A1010FB15F8FD0D16181220FE140C1C06FE061213FA080F15170024F5060B0C09FBFC040CFA021F24FEF50903000B15170609120513FE0D071402030B1317F61310FA1219FD0C05081006080A15F6FE120E0CFBFDFFF8FA11F7F9130A0FF716FD0A0CF80D10F8F60300060016121D1B12FD0C071213070AF60204061C282D1B1A0806F70605080E180E20151900FC0F1100080703F80204FEED16FEFC1601F616130E0D050E00E318070011F60A0F0A14031B1B09080E20FD1717F9FFF7080C09230D0325040C09FE150AF70E171B2E0F201806120C0A0D12F9030008092722F6F2FDF705061312FC02181F331FFC020A05FE0FFF0B0CFD1A16091F0B0D0CFB090FFE0016190B0E180207FDFB170DFBFEF7F709F906FD04F706FC1317F808F5F606F61306FD18FF08FE1102FD11FC0713110D0E090D18F6F4FE0B0D0312FA0DF1E50C11021415F80A01110402E3E3E3E4F1FAFF03F3FAF8170612FFF2DBF9F6F907F1F709F508FBFAFEE4F111020E0B1313FA0515000B1EEE0420FFFEFEFB0E03FF120F18ECE52017F2EDEFFBFD0213FAFEF8E0F616F2E9F5FD1005FB08FDFFF9FCF1DAE6F91015FA170DFFFF1B061AE6E5FA0D1D0C140511FC1008160C0F1A00130CF9FF0A130016F5FCE7ECFB06020505F9131308F5061204FA1608050BF4F5FCFE0A030EFDF70308FFFE07030CF30F0F0D01F7E5F1E3F00714FC100014F9FA10EAECD8AFB5DDEAE1EAF7060A0DFA0AF4EAF9E2DDE201FEFE070B0810F7F3F3CFC7E7F716F5FC0915FD09F1F9DDDFB4C9EBFF0EF8F70B0004F1FBB9C7ADE2FF080EF8F5FAF2F700D1A9B6E71E121802140DFC051904ECF7CAFF1F2518120D141E2C0D1CF6D9BDF621170610100CFCF6F6EAE3C3BAF108FDFF10140C13F7F30F0FFB180DF9FAFBF70511FAF701FA05FCFD0B14041506170C201B0A190E0CFA0516F8190E150CFCE1D3ECDFDFD7F8E7E3DAE6F509F0F404FFE703ECF8EF0307F1CEE4FA07EEE6E9E1D6DEEFF207F9C7E6FDFFE905EFF701F0ECF4E5D7DCFCE9F3EDE8EB070EF0E4E8D4DDD9E8F2F8E9F2E6131FF5EEDDDCCAD30301FCFFFCE50714FCEFE7D6D4C10BEED5E1F5DF0703EFD5F2EAD6DF05CDDFE4FC050DF7FAF5EAF2E9FFFC06F5E706080B0A08FBF405FF18F60D15101401EF06111004FCF807D9DE0C07EFF0ED08F507F3F6F72704E4C7CFDEC6E1D4E9D6F4E3DF11F607ECFCFBF6EBD6F9E6D3E4F1F50DF6DDF003F70AE5E7F6E4EED7E408D307FBD4F7030DFDFE0CF7C6E3ECF80AF2E2F1FC120B0BFF02CDC5F5F1FDFBDAEAF4EC01011709CBEFF0F3E3BCABD1D1EBF9171D0EE8010BDFB28DABBBD2EA020611FFFC3DEEE7DDCEC0C8E7FEEB0EEDD20230FE0113F6F90910FBF8EBE9CFF42FEFF814162721111A00F1ECE0E520E80C112016140DF7FA07EBE8FD110CE3221B06F8F3FBFDFDEEE201F510F9EAD6DBD3F2D7F0EDF3E4040A06FFDDCFCCCCD3CDEBD4D4DADFFB04D501F9F80209090FDCDBE3E600EEEDF2001D21060A0FF3FDF1D5F6F2F2FE10171A0A0C0406EFF4CCF6EC0FFF1B1A0C0F0BEC01EBF0BD0204FAFF0DF8FB08F20E07EDF8CEE9E9F7E6DBDDF5D4EEEF0504E9EF0FF2D4CAE8F1EAF601F1F6F3FD0A11E8FC10FD01090A00060205051F1CF71CFE090C1A1E1E04061D242E1B131B111C091D1E0D200C0C241C1307110C03070CF6FE1D2B161424F4F7F805FE12F5FDEFF6112008030903CDCED2DBD1F3E8E6F4F6F10EF5FBF0F105F906FBECF207F5FC0AF8F0FFF3F70F040E04E809080610EE0CFF11101A1E0408F8EA02F9F4F50AF20B081D0406E9EFE7F6FEF7F6FC10080300F3E4EBC2CDD2F6EA0CEC010A1215FBE1FBEFE8E5FFF5EEFD05EBF7F2EFEDE8F5F3EFFA080DFCFCEB0C282418040B0008201C0CF2FC2B2A1C201F1C142922330E08F411FD0C14101D2307252E201F07F50A0319020DF31A032714161405121211F901FDECF7FE0D2B14F5F2F303F0F8DCDFF7E405031803F80CFC02EBF8EBF5F4EAF4F90DFA06FDEE00F10AFAFF10FFF3F00A0906F7FF0D07F5F703FEEE09EBF2080103F5EAE909031B1611FB11EDEAF101F1E5E7EFF606081011031203CDF30BF30C1015121A1102FBF9E2E0F3EC121B0AFAFDFEF6EBFF12E8E2D3F20915E4F1DDEAE0F2040702F40FF01700D0D9D5E304F3FBEDF50F2FEEF6EFE7E8FD130C160EFDEB2243FB05FC13050F1605040A01FB26330908FE11040B15180E0117141525070100140317110BF8131A0E2B1AFC0DF7FFFEF6E801FF160308070DFFF70A0CEFDAE1D0EEE603DFE6F80C0501F2D8D6EDE5DCECFDF90D070FF00B071BF6F0E5F1E9D2F20FFEFEF80114261E160305CEC0E0F1F2FAF2FE061213101D110BECE303F2FA13F0F91506F512151115F1DEE302110BF2FEF1E10D181D1FFBDEEDEDEDDFCDC8D1E0F60D15160BEDDDFDCDB7B6BEC6D9D1101CF5D40722E214DDD3DBE2FB04FAFBE5C40717FE1DF7FCED0003FE02D3CFC716110E151915121412FCFFD2DBFA1A1D0C120E0F0E1CE4E4FDFC0C12FDFB060AFF100FF3F1F5F2161414FBFAE7F9E5DFE9ECF6DEF4E401FA16040CE7BED5D8EBE0DEF3DCDFEAFBFCFEFFF20411F2F6EDF302FA0E02FEF8F5060F0DFEEFD3DAF6E506F10D03F007090AEFF0D1BCD1CADBF6060AF8FE0C0EF6D9C9B7C9DEEBFBF00A0DFE12F0E2F6E0E8D4E0FAE8F6F70D011DF5080E130DFEFD17F70DF1040E33181616233C082E29FF0A00F6131825112B3D34292C211101F8FD07151630322A2203F104FC130AF0F5090F131C17DDEFE00EFE10F206F1F4F6FFF6EBE4E403F6080EFDEE00FAF5F7F6E5E1071AFE09FCEEF4F50C03EAE8E4DCFEEF0B08F3050BEEFCFDECF1F8F609F708F3F8F90DFEF808FA04FFF2E2E90D0DED02E6FC03150A14F7F0E3D6E9F505F5050E1001FCF8E9D1C2D1C8EDF1F40406050608F2D9CDF6F9C3DDFBE8FC0D00FBECD5EEF1050FF8EB02000BEDEFE7D8D7EF051CF40F2C01FDF4E5F20022110B1820102C44FEFF1819221326220E0C1321274611FD1014292A351B1B0100EDF72608060D161D1C281B1AE9D9F5FE2D01FB2A1E13070504EDE9F9F1131D070607F3EFE4EBDCC9DBEB0BEBFF03FDF6E4C4C8ECC4DCCDDB0E090A06090F09FD07080AEE09F702FFFDF7F70F10F4F002FBF9020EF4FDF9020D07F9F2EDFFEAF407EAF3EEF0FCFFF402F2F3E4DCDDE7E0ECF0090203EFFD01F6EC00DFE1EEEE0D08080402FE0B06080BF3F8F0FFF51405FA0F001B0821210DF3FFE4F509FCF20E111D2F251F0A0FFB0604FCFF030F170E2E2813F60003F7FAF3EE01ED08F40C0D02F4EE15F306F401FEF50201E5F1E0F2DFED040EEDF0FE0900F8F6D7EBE7F8F5EDEDEDFBFBEEFAEEF3010D0EFEFE07FF0D00F1F60D0101140BFA09F60309EF06FE07F0EF0408F3F90B10050EF6F200F2FFF20DF904F9F30DFEF9FB0AF602060B0AF6E6E7F5FCF3F801F405FCFFF102D8E2DCDBF1FFFC06F206F8EFEBFEE5D5DBFCF2ECF60004F5F9F90D05030DFEEAFDF30302FFF90508FC081E161C1BF605FBF206EFFC050024100D1A2D0B08F9F601EEF5F410F905EB221902090BF6F51000ED0700E6EDFA00EC01FDF5030308EEEDDED1E6D1D4E3030811FCF7F50AEFECDDDCCEDADA02FE11F0F8F80AECEEDEDD04EB09060AF70C0C01FE0705F10A0CF0FE070EFFF9FCF5F7FB1500110AF4FAF0F10DF208EEEEFEFEFE00FC0EF00EF2FFEFFD0C050EF300ECEDFB03FEF1000BFBF20BF400EEF9E6C1E1D3000C05F10A0AF90602F8FDEAEFEBE8FAEEF00DFDFC07F4FDFDEEEEF3F1E30AF50717F90A1313FE04F8FE120104FAFD1D28F6FAE70B081712121110FA0C0312FAF8F21D131A1B00FB0A02EEFA16001010FE0503FBF6FB11F10A001A0C16200B0EF8F8FC0B1308FD031012111A1201FD0CF40D0CF5F1060505161C05E8F3F9F4F8F5FBF2FDF3FEED01EAF301F9FE0DFF0403FC08E5E8F1F3F704F00907060708FA10F80FFBFEF9080900F7FCFC060016020F220603F4E8E8ECF6080E0FF909210F160908EEFDF50AF9F70D0507181304C8D4CCCFDE030A1314322A10110EEAEDCDDFF00CF6F6163B2C110EE6C9C1CDEBF6170B0F3250564C42210BC8D7042117011A3C4A231F1D241D061A192213FD050A221501FEFDF8213F592F0B070DE7F0FFEE031F36434F510F0CF4F4F3E0DCF0E50E2163614021FC0D04E7E6CDF6F604133E3020020D0C07FD030A0B0213FB1016FA0DF8FA0E0D0F0511F20E0D10F9F4EEF8FDEDF4EBF4EDFFFAFEE8EFEDF5FF00E70A121030112513F4F60008FD06F0FC162E201028150B0BCED4ECF3EA071F1E1E130A162305EBD9E0F413FF10130418F502FC00E8D6D3010316110CF303060A03E1E1D6E3EAD3D6DEFBEBE1C7EBDADDEE0C26E9D4CFE2D6D4DDDDE3F6F4012C1F051FEBE1F2130003EAF4FF171E2FEE2100FCFA062107171D1A1E111A080B12201816020F2421212104160D22040B1C0EF9FB00220513090ED3E8F4EF0106F2FEEC0604F210F010F0D4DEB9DFDDE6E9D0E8D7DD0CF4FBFEF4D7EADDEEEAD9D6EAE006EFF8FF23F903051705FEE2C2ABEEF7F2FD0CFFEEFEF50DF9EDE3C4E40E0710FBF3ECFCFB0E0A06F6D9DBFA0919ECD1CED2FD1C1F3013B7DEFB01ECBEAFA5B0FE020D07FCBCD5FAE5C9A8B5C8DC0DF5F1F3AEB9DC0A0BDEC2BDD5E401F4FBEAEFEAE4FA1107ECBAB9CBEAEE1800FFF1F406052BF1E5CEAFDFF3FE1218F5D41B242816E9CDBEEDFE051912E8DC0A0C0B120602FD06F11704F2DDF00B0303161C00FAE5F40EEAFAEEDFF908FD02223621FB01FE15E3C705F6F1EBE5FAF7EBE9DADDF3FAE6EFF91F1D09FE101E0F09F8F0D1D1F9FE0D292517051A03F4F9F7E5C308072016040D0F1D0DFB0AF0ECD6FE0807FE0903F012250D1C00F9C5F9F016DAE5F5E320221319F0E0CBF8E9E7CCE8EFF71E0C1A08FEE2C8F007FFF0D1F8F7FAF80D001303FB041A1AFFFAF8ECE4FD180B0AF9DF0A0C2215190DF502161A1311EDD5FB0D14030B1109141214FD05D3E7050E2A0C13141303FF1001FAD1DDF9EE1C2B31472F30261B0A00D7E2EFFBF706F4F2F0FEF4F805F8EF09ED0DFD0BFF05F5EFF6FEEC01FD0D0C0302160D070B0A09F2EDF30107F80617221805FEFD08EDF0EDFAEC04F80D0BF6FBFAF8ECE5DCDAE6E7FDF70FF4FE13FD2B2010FEF7EA08FEF2F8E912133228260F10FBFEF0020A0100191C241A16EEF007F80B04F8FFF7E8070811F3E0EE02010FF10819F406EEEBD8FC07E4F2E9E8F9F800041408020706F801F5FD030EF70208F50E16190207EFF8E2FAF70A080B11211B1A0423FA09F40201FDEC100F1422121E1200F00A0801F20802FEF7F8EDFFFA0BF700ECF5F7FEECEDE9FE01F804EFE604000404EA14211101FFF6F6FAE8F2B3EDF41B1B1B0007FC0CFBEEF4E0DDE3F82B261404FF0B1206FBF0F0D0D3F6132C11F3E1DD051520020AD2DFFC1E26EEEECEF21E271118E4DBED091DE6F5E4F409131C1D01F4E3D9EDF9F4E0DCE201020C140CF902CE00F30FE9F5D3F4DBFF1610FE05D4F40F0502E5E3E5F6062013F6F1F1EF331416F1E5F105130D02EFD9F3F2130F130E020700090BEBF2F306F7120D02120904141B00F4F0FDEEF2F90B0C080B03EBEFFAF7050A0106EDD6D1E40903EAFBE2F8F7F2FCF20A1C000F13011600E9E1DFEAEFFE212BFF0C080815FDFFF4D1F9F8EF0B11FF020E10F9191B07F4D5F8EF0DFCEECBEB0015F9101BE6E4FFD6F0E0C7C9D7F7FDFEECE7E7E7DED4E7C5C6CCEB0712FFE7C5D2ECF121F9E5C8F4011CEF000AF8F1E8FF2507F3D9E0FEF7EAF702021AEBEC153112F4D7DAECE71A041619EFF5082E051401D9ECF60F19FDFAD1051E231812FB01E6ECFBFEE5E3F2FB082917240E0001F3F9F2F8E4F508F5DE061C211008F101F7FBE7EC02F103FE0906FFEDF8F5F1F1F8FCF7EF07030B0A06F000F7F1F8F600F6040A06F406E5EBCCC9EBE8F3090BED04F2FAFB04CAC9CFDADEE106F5F1FF0E07FF00121F3A190C1202FD01EC071F363C331432332428FAF0F6F7F6163A4FFC0A092B271602FDF1F107FE04F4A6C1F4F2E9ECEFEF02F90FEEECCBD5E8D9E9FAE0F20C0BF4FFE4E1D4E3C0F10004F30DFB0807EDE4CFF1DBFE211F110DFCF4F4FDFBE3EEDAFD140703FE0000EFF2FAF604EFFBFA11FCFBFC03F204F4F90004F7050DE9F701FEFCF2F6F8040CEDF4ECECF203F1FBF304EC03081B0D0B18FFEFF6ECD6C005FA0F112408140E06FED8D2D8BAEB0DF2180D0F181000F1F7E2CCD7D2EE022C0AFB02E828262F2614C9E9090B06D30420223A270B16D0DDFD0D02E0E9F01222280BF5D3CDD4DB0C091EEAD9EF0FF6C8DEE5D9D6EBFD061304DCC4C2C2F101FDFCFCDEF7042EFFF7F7EBE009F9040EE4EA0A061C050A02F8FC0F231400F701F2060F06241F160721311A0300F6FB09FF1D2137301114241BFEFAF5F8EDFEEDFDFEF1FEF806F10208F0FEF2F70C00F3F9EC0DEEF9ECFA070CEE03F603EFEFF503EBED0C030AF2F4FB07EAF3EBE0EFEA0BF9010EF4F00708EAE603D0DCF0ECFBF10A0009F30AFC1C0E04D9E6E9F0100FF9FFF0011A343E24E4E0E3FB0FFFF2F3EF1316264927EADEEA130209090BF4FA00201FF9E7F2F9F70409F50000F900141A160308ECE503F6EEFCFDFF0614141B01F4E700F6F1F20D0AFAEA0A092BF9F3FBF30E02FB0C08050CEE0A1AF9EDEDFFF0FCF6F901FBE7EFE5E9E7F1FC09070CF7F701090C0604EC0002ECF1F4F6080200020AF4FBF5F8F6F1FCF700FD0B040CFFFA03F1F2FB09F8F3FBF0EF0CEBFA00F3E8F8EA02FDFFF2FEFAF4E7F5E3E5D9E0FE12ECFE0AF1030704F814F8F3C8D812F60AEF07F70D06FD080DFBE3E200F20102070BF5FD19231BE6D5D2F7EC12F0FF07FEFE1E122CF8E1D8E303F802FBFD0305052304F3EBFA050BEC0AFF05F2E8FEFE220908F6F1FDFAFA02F407F0FDF9FFF300E9020206FBF6FB0DEDEAF8D9E1F7F6F4EDF7FBFCFD03EB0102FB04F7F7EFF9EC020AFDF5F60505E4FAFAFB00F10D02F1F300F10CFCF80BF8F205F9EFEEFAEDF9ECEB0CFD05F7EE03FF050C0DFD0EFAF701E5F8F5E1DFFAF5FE02F5FFFB13050FEACBDFF1ECDDF504FD00081AFEF5F9070BFE0AF6EAEBF80B031C2316F2101217151EEAFBFEFB0A2A22FCED0118120A0BFE05010507F705E0E0F1F6F5E6DDF70305F701DBD8CCE5ECE2F107F1EDFFFEFFEBE4C4D4CBCFE808F70DFAF0EDF0FFDCCBCCB1DEFFFA1816F6EAF90AF8F4F2E0FDFB11021AF2F106FCFAFC0300FDF80701F907EDEFF00AEE040D061F0500F8FC0B050C0AF408FE02EDFD0AFB01EC0CFCF308F90E1217FD0E0D1012EDF4F002030405120621010F09FFEDF9E3FAFBFA1715100E3A2C0AFFDDDBEEECECF200FB1F303B240912D4BAE1F9EBFBF61335353E24181611DEE7FFFCF2FBFE201522301F0A192419FC04F70E0BF91A0D2A18241B0A16FDFDF91427123733253B3913E8DA04F7EC1227313C594F3B11F0D2C5EDEF01130F1B1D2118101AF0DAD9F6F20A0E21292537161E10FCF7FC0DF6EFFE081D2D281B150D0EFEEDEFF10D0BF50B03F9F0EF080303F6F5F4040903F9F3FFF3EC09F5F3FF16F903F8000F001C051EF2F1DFD7EFE8060A19090B1D0E190307E8E3C7E60C121225131B040DF700DDCAD3F2071C2B1D1704FF0B0C05E8D9D8DF01FF0AEBF4EF080819101BF5DAF7D2F5CDD6DCFC051D120EF0F4D3EE17F6C0C5E704091E1A0FE6E8DAFB2011F9F1ED0012FF05F609E5F0E107241D0EF8F5FD01FE1602FFDBF0191B342509F5E5F6190404FEEEDD0619FF0F0E1207FF0AF60AE9E7E8572724050B12160B0C07FBDEF4ECFE082026263B15091A1501E2C50811F1EAE3C7B3BBC6C4A4BBD2D90DEFF5F0CDD2DED3ECEA03FFFE14EC04FC03FD1C171A181A28130BF4F0EDF60D24212B21192C2501140D14EBF21B002A301EFB1B1C0800FCF9E8E1ED04322D43002B1C15FADBC8F2D4F11524333BF8212827F8D4CDF9F60E10272611EF2E1E2305E2C7FCEF02F81D0CFF011012FBF3E5C6E6F0D5D8E3EDF51A1108EDEDD6D3020ADCC8EBD603FC18F3FDEBE7D8FED8C1D6EBF9FD0D021D0A13F8F9FAEFCAE2F313F10004F5DFFCEDCA0802CCE7CDE2C3D0DBD0BDDED4F2020401D7ADAECEDCCBBBE4EDF8F9F202F0CFDBD6DADBDAF90EFAF30103F7F4F507DAD4E3E3F8FEFE1AFEF2FC0E04EBEBCDC8DBEEEB120FFEE6EDFB0301F4F1DCF903EFECEFFFD0FBF60A0E25E7EF11F9FFE7C7FCF8031C1F13230C0109201A0CF5FF040722230E0807160E2A270EEA01F8F3FC1B1108110E0F150DF5FA02EDF0F5F3DCD2F4FBF5EDF5F7D7EEF8CCD4DAD3E4EBF8E4F6FEFAD6F5F7D5E7F4F6F5FEF8FB0309F7EBFD02EBF0E4EEDDE0F0F6DCECFA0AF6F6FD0D0DFDF6EDF5EFF6F7F0FD060FF309F2EDF5ECF9F609EF03F5F8FEFFFF0705F1FC090BFE0A0B05FEFFFB12F70C04EFF20307FC1A01FDF9F2F5FDF6F6E3E2FD1A271303F10308E9E8F90FDEFB0A2018F8FDF7F2FD010B090CFC03F11F0904FB0BFC090C16060905FEFA05180C08FE0E04F610F9E908F0F401050506F5F8F5F6F8E40209F8D6090D15F2100509EFE1E6F8ECE7D5EC03FD03FB01F4E9120800F8E3EEECF80C0CFCF6EFF214FF0CF4FAF2EF0F0DFA05100709EEEAF1E5EBF6EDF2F0050503FE071200060402FBF3FD10FFF410FC02F4F0FFE2EFECEE02ED09FDFDF1F8F5F4DDF0DEFA00F500F5F1F2FF0305210D17F0F20608092C0A0FF0FB0E0E08FBE5EB0B0E13210FF804F5FE0300FAE10E021503EEF5F4DDE7FF1A2016F207150D0BD1E5F4E4FC15211B26F600140C00F8F101DA0819250C110F08101904F2DEF50706071A00EF1112F8FD05F9D80201ECFCE8D5DCF8F0DBDFE9D5F0F4F2ECEDE4E4F7E7F4E5F6FCE7E807E8D8EBDE01F0E9E5F3FBF70A0D07F1E2E7F603F50B191300EE010CFAF106E5F003F1EAECF0E90D020210E6CBDDD4BAD1DFD2D1D5C8D600E9F3EBC4DAC3E2EDF305121E08F4EC04F3F8F8FC0A0D182A172E06FCFCF50FF71315FCFF1C25162202F5F3F904082107F5F924090AF8F9F6E9F3041A211DF901240DFEDCBCDBE40417271324F6111E12F7C4DDD9DE0426180F0FFB190F0F07EEF4D9FDEE0512040D11250E06EAF6EDF1EFD2E6FBD2F909160503F8D5E5FAF5E7E5D5EEDEFE0D06F6F2DFD8EFFBC6D0DDE7F9EE0A202A25F1F2E202D8DEDE08EBF6F3110508FAE5FF02F3D4D7D9CECBC8E1D3D5E3E90AF8FD0106F6F108ED0FF4EE0F05F6050CF0F3FE050FFFFD0804FE0F0F030EF6111807063F261D1407070A01F1EFEFFF192A4C3D3C1B0812F9FB08F8F7EE1F1F361630301E0EFF090D0BF80F091825FD140119F7031011FA0FF1001BFAD0FB0822F609F3EDF9F2DAC5D6B2DCFB2121F8FA06FB08E2F0DACCC5DF010F10FBFCF2F6F8F61615EFDEEBEB0DF80106040E0312230D270BFAD8F6F8FD0A0EFA04080C0727FCF2EFFAF506F0FE0F030FF8120F13120415FA030F02EFF100F30907FC09EFEDF003FBF200FBF4E3CED9D8EDF8EA0B0902FD0401EBD8D2F0030E121813FAFA0E03060C01E6DEE20716222F0BF0F9FF09F3E5FAEFFE1A3C3332020BECFCFAF00F19FF0A2D272910FC05FCF30D2821160812110E1101EDF304101F2E1319E7FB0212FFF5F405FA0F191EF9D8F308F9FF0A02E20BF4FFFF07EBEA0200E6EAFA0EFDF5FBE5F7F2D7F2050CF100F204080AF7E8EBFC0CF9EAFCE8F8DDFBFBF609F9E0080A0D0A09F9FAF90B110E0500E4E4E9EAEEFCE8EDF305F60CF80AEFFDF400ECF907F5F5FE0BF50AF70BF6F405FFF6FAF00C06FC0BF8EFF2F30FF80D08150913FA020B07FEFD08FE070D1F2321000DFD01060A08F2160D2925361B0D04F0030EFF0110F20B040E0C1E1909FA100B0DF4FAECF0ECF3EF060A0E110FF102F9E4D9BDD7F9C9E4ED08F5F9F9F5EDE6D0BEDDCFD0C70209FD08F70D04EDE9EBF3D7E5F1ECFF04FB0B0BF9FB0E180D05070DFF00F3FDF5F5041924121922FD09FEF301F4FEF7020F151B0713FF07F0EEFA0003FDFCF307FBFA0CF70605F90B01F30DF4040409F50809F7F804F5F705EF03FC0EF8F5FD09F30CFC08FE00F7F3F20B070F0BFEF40EF2EFF900050CF3F3FD0B060D14110813100D0203F6FF0D3B3C312404FEF70F0BFDF702FE1B483F4802F5F7060602F50EFCE0F41D260BFAF6F7040E050302EAEDE5F506E3ECEA0B0DFC0E0CFFEDDDE7EEDCBFD4FE150C02FD0702F4EDFEF6E7E20102FF02040C00000D10FF0C04E8FF080610070B0CFE130F2B291D0016130000EF0E01F1170F19170B0FF509050DF9F40205F1FA01FF170610F70909FAF80006F9F8010AF10FF5F7F70B0C080302F4FF08FF02F9F00A08FD09FE0102F705FD0FFEF0FBFBF0FDFD0DF90CF2080C180F0C070700FCF11007020AFC1D22321715132309F2FA0107FD1F1FFF150C151F0F12FD05EFF501080B1C041307FB010BFDF307F4DEE4FD15D4F90E1107FE02F3F8FBEAEE070ECEE8202E0F0A0D040FF8EF1802F4EFFB0D1B1BFDF006F70FF5130F1313FE020E0CF2001101050D170E150C03FFF3FBF0EF0E07EF03FDEF150AEAFBFA02FAF5F4FCF60C12170E1102180EFD0B02050FF5FD09F6F2EC04EC04000800EF11F3EC04F3FDF9E808F7040CF9F0F406FCF9F0E9FEE904FB0E090CFAFAF9050FFED8D7DEDBF70706000407F3ECF3E2B6B4B6D9EFF31007F30BE5F4E4E8BF8EB9CDEBE4FE0909F40FFBFDE8DCB6BFC8F8EFFBFF03100911F3E412FFCBF90D0EEBF70C0601F3EADFFFFBD2FB22000B04F5060200EBF20B09E4FB1919080CF0FA07E9E6EAD2C4C2DBEE05010AF000F4100CEBC29CBBE9020DF9FA101006F200E5C9A4B2E610F2FE0B0101EDE8EDEBD700FFF5EC010DF60104FEF5FC0814010CF90AFCF0F6F2F0FDE6F4D5CBEAEEFAF6090A0FE8DFD1C8BCCCDCD8CEDCC8D5FAEDFCFEF6F8E9EBDDDADAF6040F0AF2E9F30C0BEDD8CCC9C3CBE51707FCFCEE0001E3CDD4CAC4C7DFFA080CE6F6EDFAF3FBD6D5ECE6F4F8E7F3D3EB0102020A04FF13F704F1D4C3D80519261332101F26181B0CE3D1F019192A1F1D111F1C1A0F10EBD900F7FCFDEEEEF60C07F3EEFAD0DE01F3E3E5E9E5F0F8EDF7F4D8DCDFEBD9D0DDEBE9EBE704FC1AFEE1F6F1D7DFF1F6F9EAFE0D0705F7E505FED6D7B8E3D9D1CED3D9CCD5DFED0FF5F6F2E3E3E8CDF3F5FBDEDEF5F1F3D6D5AAD6D3DC0A21EDE51BF40810D7F1FFF7F1E9FE0F0FF50D1DD5E3D50A1327F3D7E0EBFAFC0A0FD7D6D8FB291B06DBB3B8C3C01E3004D8F6232C2220D6AFA9A1810C1DF0E3050E0B110CEDACBFC6A5B8FDEFCED3CFE3F60BE4D1E0EEE0DEB403CCC7C4AECEE3DBE51500FF09D5F0E1DEDDD3C3CBDE05010A1016F5EED8D3DFDFD4D0E9F4060F1D22F1F9E906E7F2E8EAF908FE0F19030D000FF3E7F4F00FFC0104F6121E0E01F3EEC7D7E0FBFE05FAECF11C0BF5EDE7E4DDD0C5EAF4F6E3D3DAF8FBEACBD3EBEAF3F0080C0A0308FDFAC7E2DAFD02E704FF201E0B19F9F6AEDEFB040CF10F160C100B2E0EFBD6F300FBFCF5F9F9FE0133292FF4D30C01FF0519FCF0D8D5E52A17F3F3F7010F2113F9FDDEEFDEDF1608EE03EBF70104EEF7F1E5EEEFF3F6001107EFEBEC000500030701FBFCF811170606F5F3F7FDF7FE0110E4F801FF1307161AFD00021EF40FF5F7F0F8FD06FB0F0F0DF6F90EFFFD0ED5F908160D2A1016FE0C02020E041312120D0113FFF6F7FE010CFE1108020BFB0FF916F8F203FE00FA0EFAFFFB04F8F40A0F06F9FE15100DEAF30305FAFE1917160DFD0713EDF506EEF80E0722243D3316110DFBFD05E3F901F9FE2625330FFBF5F1FF02F9EB0DF50105F7190608141102E6F1F9EFFDFBF8F5090CF912F303EDF6EC0501EBD7F1F8F7FD080E24F8E9EF03EBECF200FFF6F9FD0B10172627150C0BFA000BFAF301010A0D1C1F14150F13EDFF020A0109021E200D0E05FC0BF90A0B06060F01F413FD12210704FD0C01F614130AF60D020415FEFE15F4F7F4F4FFFB1312F5F4ED00FCF7070C06F200EED6CBF9D8F50800EE00110609F8E7E9FF01EDEFFE00FF010F0AF6EEB6D9FF0005F3FA07091E092AFAB8C4E6EE02F2D8D9B9CDED1D3DF6B7E7EEFD18FFE8DCDCD4C71031F3D6EBEA02121504EBE0DBC2E7FFF503EF08FAEFE5E1F6E4EDE6F1F90A0BFC0E00F1DFEEFB01E8F3F3FDF918091013FCDDF5FEF605061AF9FC0D1101F604EF14FE0B0B1816F6FCF4FC120E0EFEF8190516FF17FCF2FFE5EE060F08FD09FC031E20EFFE10FAF4F91610EEFC0317FA02060A0AD6FADDEADBE400F2CEE800FBE6E4C5D6E7FED6FA0804F8F0EEE702C8DBEAFCF2F301F8FBF30EFBFEE8C4EB050D1101F5E4E1D1FCFDF1EBBCF814251809C8DCC8B9EB1CFEE8DC071721090CCBC6C3B3E41DFFE7F8130A040C02E7E2F3F0C3EAF9DBEADEF30A1BFCDC0915F1FBF0EBC9E7F6E2F3E2F1FA03051E17EAEFF2EEF6ECF2CED3EDFF1B1F09FDE8E3F2F7F9F8FBF0F308F91808FBE3EC09E8EC17020BF1F0F40714F8E6F7E2E4E501FB0FEFE5EAF7180F0AF8FBC7D2FC14FCFE0EDFF20002F00B02FA0A0301F40C04FE03F4F50FF80B1107F5FB0AF4FCFCF6FD100F01F60BFC0A0212F205162719FEFE0CEEF704FCF2DFDD132F3410070E100FF801E3DCE5ADCAD502FB171903F9F9DBC9DFD6BFA095BED1061DF90208E3E4DCE0E5D2B3C3C4050D0F0F14E0C0DCF8E9CFB6C2D804F50F191208D6FC0BF8D3D3D0F2FFF2FEF70C0DE0E9F603100D08EA0F0406000711F3E7FC0D051D0713FBFEFF0C0C0AE8E8E7FD0404F40607FF00F701FEF0E7F6F8FBFCF204F6FDF7FE0D0BF60103F40D16130B040E0B0209F7F5FDF20B0A18FF08FD040AF5EEEDE306E1FC0CFE04130DF3FFD8DFF0E801F9FC142C19271D01F1C8F1FCF5F7F8F5EB21282D3809F6E1000FFA06EEDAC7BCED225502FF081FF5F616F5E1B0A5A2CE2000FE10FCE2F9EAD8DEBDBC8FB9E806ECECFCD8D4DFDDC3DED9DDCDEB14071309EAC8D8E7F9F406F2FBEE080A07FCFEECF4F0FAFD0CF80FE8FE0C0AE6020F040317FCFB0913F6FF0009EF0116221306FAFA121B0E10F009EDEBE90B061A0D100F06F3F7FB100F0FF613F3F3F809F8FC011604FA0606091213140F0705F7FC140CF80A0F0D1413FF030D03F4F9F60F0FFB0AFD06190BFFFAF3FF0A0AF402F813FD0504211CF0EEEB03FF0109FD12F1FC2423351F05F5E6010BFFFEFCE7E0F92C3B310E0C000C01F403F1E3F5FB002624110E06F7FE0C0C03FBDD091527222415F9FA12030623101D201105070BF910F7FBFF110B2518270411F40404F5FC1004FB191609281B04120CF302F3F8F816140500170D06090F00100703F411080702E6F9040803FBFCFC0FF6F8F401130A15010B120D110DF604FE0BF6FCF908F900FF06F40FF805F9F40403F5080F0C030B03030E070FF9001A1906011507060E0E120E16FC0E0B350F0501FF080A1601FF16F911000A17FB0801FF1019F9110BFF0EEEFC0027102417050A0EF8F8F6FAF7EE0B1B2C2512F500140F01140FEF02133E2F1E0EFF0502120DFC1915101E1F0512090C13FE0AFB04080F0915211E00020A03FB080B0D0301210A1B02F3000BF6F4F51AFFFC0CEA000D0DF9F00907050D0415FCEBE7F402F40009050909F6090107F0091007FB110AF50A00F4100001010301F80FF4F5F60B03F407F606FAF8F8FB03FB0903FFF4FF090809050909142E1108F7FFFCF500F8F7F2F5F7062C382E0E0909F4F3F8D5F3EDF9E5FD240E1A07FC1506E0DFEB02F5DAD7D2F71C2E1106F5E6EDE51008D0BDB1D2EC19FA011000DD0B09FBD5C2D1D7E6070BFB11E9DEF2F8E5E4D7F0F601011009F9D9D4CBDEF7F4F7FC01FFFD040C05EAD5D1F1000B12F30809F805FAF9F1DDDEE3F7FE0215030109F8F900F9F1F5F9FE0403FE0B0BF6121212F6F800FE06020A1207F9080CFB0EFBF80602F30408F6FF05100CFCEAF0FBF1FDF51A0E0003F61210EDF5F1EAEAF414151022190BF212EEF3F3E9E6FA1A3247353B240C0BFCF3E5DBD3F7294649494B331AF504FEDED9E2FF3257615B430FFDF80EE6DBCDF1283A4A31362B1913FA0617F3EC0D122E23FF011306F6061E3A2F38302D1106EBDCF00F10F70A323E46452A1B18ECF1F2F4F502061339341E1B181606E7F400FBFF0102203220221D050BF1F8F0FA10120AF6211F332637100616F40FFD0FF9FC03090C11FB141301F4040DE8EDF1EEE7FBF2F1FFF7EFF91502D9F5E6D3D7C7FEF4EEE7FBF7FBF9E2DCCDEAF5E400F3F00E0F1609F6B9E9F801FBF2111E1926132C12EBB5ED05F1110E000F171B223124CFCBFDFDFF020009FFF8E60D3831CAED010A091A1A08E8ECD5D7FD08E5ED08201E1713FCE6DDEDC6C0CAD5DE09FF09FBFBE2E2F203FAD3CBF0FB1F02F6FCDCEEF60A15080EEDECFAF218120AFBFBF50403141CF0B5EBF107FF0200FB1007202DF4FEA3F8F9EE0922120CFC0DF8F4F903F1F2C8CBEC08211908FEF60FFCF9EF0B0923383431141E3120331A0206F404283A341E35FE12274D20C809F31C1B1C260B060A15182321F204EC0A20201912F4E1DFEB0D0BF6F9E6F61A0AFFFF03CAB5C7ECDCC6EDD8F619FE1307EFB5BFCDF6FCD7F3D50A25231812DDE0DFE11C23E1F6E820241B3B1B1FFC01FD0E16D0FAF2DF1F32333915011F0E0206FDFFFED20212322704100912FF04F3FEE3C5D40B2B310215140AF5E6F00EE2DFBDD4DD06E9ECDAF7E1D1FE0407E8D7D2DCE6D7DCEAF7BAC1F1010AE3FFD7DEF9DADAEFD5EDD10DF901032E1428112020302C1B01FAFD021801180B040814272F3E1C0701FBFF06F7EAEFF0F4130B141CF6E0F9FA02E5FC00F1E3EAFFF7FEF0E6DBF103F8FCF6F2DDD5EAE8D2E6F8DCF70BF1ED06F5F1ECFC0CF8F002CC0605F50C061604F8012017E901CE08051817FD1015FA060DEF01E5C5DE0713191A00FF19FBFDDDEDEBEEF2F50B1F22070C190EF5FEECF2E6E1DEFF0B1B1F251405F4E805FFD7D5D1ECE0E5FDE804E7BEB300FEE8F9DCEDF6E2DCDAE1F4C9D40AFBFDF2FBFFE9F305ED06FDFEFBFC00F1FE010A02030F16170A05F7FE0905FF13FDF5EE1313252C0710F5FEFFEBF0EEFCF8FB06FB11FA060EFCFDF3FCF3FC05F5FDFCEBFDECF3F5F6FFEA0A0016F7F4121605F5FBFE08F608F50C1222190A0D13FE06F8E6FEFEFB06FF1F07FD0EE8F9EB06EB020013E11F2D09040AE4F80606E6FBFCF4DD02132219FEFFE6FC0AFCE0DBDED0F5EEFD0C050FF70C0BF2ECD1D9E8D7F3050C12F3F8FC02FC09F0E7CACEFCF70F000209FBF5090C0C00FB0C1001F80209F1EB0000F1050006F90D07ED06F3FF000AFCF4FB230E1A190D081212FD08F709FE20290F10030F051F282E01EFFE03FF13050FF3FD1D2420150107020311EE050AFCEEFEFD03F0F7F8DEEA08FF1206F7ECEAF7FAE6D109D7DE16F70409F3F5EEEFF406EFF2D60121FB0D01040BF5F50723DC0DF1F0050A08031A0903181315F00AF7DE011120130B102A100514F7F5E8D6EAFD18210419151815FBE2F7E1F4ED100B230B0F010A07EE0503D9D7EA0201F8F6E2F0F8EEEFF4F8F1D8DDD2DFDCCFE3D4E0DB000C0C0000F7EBE8E7F7E7F6FA0D06050A082E17201D24052C2B231A00F7FB0C1D28211B0D07271E350DDF040B02FA0D1208FFFF001214020503F9E9EC12F3F6F3F7F2F0F3D6EF16ECEBEFFEF7F4ECDFDBD4D9F0D90FE7FAF2120E03E9D1C5DFDD08F400ECF108122003F7E0E1D2FE35080200BF08152C140613F50E183125EDF9CD0D292D1A14FDF71D09080DEBFEEFE012233F130EFA0003E9F8E6F6DFD308192621FA0E0CE2F3DEF6FDF5D4F7F8EF0FEAE8D3E7C7DF090604F3E4E9DFEAEBE1E5DAC4EA0711FCF2E9F6FFF2DFF4FCDEE0FC01F20CF40A0FFF11F60FEF0100EE0702EF00F60BF5190B040F0EF6F4F30100090C0D171A453C04021504EE0603FA0A1723414B1D260C1FFF050306F9FD1F2C40375327FD1305FEFFFB08F91B14132D36FCE3E1F7000C0202F30E14053800C6BFCAF80008ECFAFB0A02182A12D4E9F2FEF3EBF1FCFEEFFF110203FC1F1701F90806EEF8E5E2D8CF0D0E2AFF0B0F02EBFAFDD9D9D7E3110F1E04F5FAF9F6F8F5EAE5EBFCFA0702FEFDF707FBFBF6F1EBE0DDFAECFE0704040100EDFEFC09FCECFC0102F0F4060FFD130A1530171A24142B12E703F4151E0A0BFB0401221F41160BFB0414F8F6FCFBFD10111C07FD07FEF3F2F4F3ECEF0516F806E7DDE609F1F3EAFD0EED0115F8EEE1E4DBFEEF0601FE0A0611FA16F2E4ECD5F7FDE6FF16FF09031D04E5F604CDF4EECBFBFB0D12242E0C0C1A09F202F4D0EC131014FE0F1B081C11040502DDECF40DFEDE06121D180E0B0007DED5E8F4DEEEF108310E0AF10A02F1F5E4C4D4C5E5DD0DFFFCEE0903EE01E8E1DDEAD7DAFF09F70A02EC0105FDECF3F70608F1EB0B0CF0F504F90109F4F0F003F107FD0AFD05FC08FEF0ECF101F102F8E901F7020BF70B09FA0801E6E8EFEFFA05EFFB0DEEF00A0E021211F4EBEEF8F6FE05FAF905102E2C1814F903EF0CFBEFEAF7FB080D2B16FE100E02EBF1F2EFF10C1209261DFE00E6F6ECED0EDCD1DDE9030CF6FAE8FEEC01FDF6F7C5BCCADCE8DAF605F00DEFFEFFF4B5CCD3D7C5D2F4FBF60308F200FEECB7C4D4CCE806FDF4F1040A0B11FD0E03F80705FD03F0F8FB070607060417FF10EEFC0CEF0AF0ED09EBEEF201F50AF8FEEC05F2090B04EA04EC00F0EDEAFD0702F80BFAFBF7F5EDE6FC02E4F9F7FFF401EBECF4F1F70CFDF5F8E300060CEBF20809F21323181E0BF407F0FFFB0D0707EE0D222C271808FA00EE0B00EA050F12010A0C17FF07F60B020A0002FC07FE03F8FDFFF3ECFAF3FCF1F107D8E2C0CBFA08FB03FEFF0A05F9E3E3D6C1D3EBFDFF0101070DF2F2E1C5D6D2E9E6E3FFED0B01F506EFF9C8B5DCE0E7FF03EEFCF10DFA13FAF0E7080100F404F2F704F30AF502F803F6F10A02FFFEF00AF2FA070C030209F1050BEE0B08F8F9F004F404ECF6EFEB0CF600FFF0EF0801F40A0B0A131708F7F102F00DFBF9FF2E1F200814040BFCF0FCF7FF0609012015241626140D10F405F20609110D1E2114ECFD0CF5EC0907050D0F171B0FD2DBD3F1EDF9FA040F1BE9F904F0D4C4D4FAE506F6F4040FFA17050FD6ECF413FD0B09E912FE101C180E0717FCFFF605020AEFEBEDF2F00B190E1111F1F80100DFE5EEE6060E0C01F6F608EE060EEBF4FA131019FCF604E9F3F7FBF0ECEEE9D8E3F8E1FDE9F9FFF109F309FFF3FEEA040506F1F80CEC0A05F8030F0E11160108F7F0F80907F6F503E8F2070A0A20230FF4FEFAFBF1CACFE6D9E7FD050E17100203F2EED3E7E6DBE8050DF7E702FFEAF3DEE2C6E0E816231901FBF1F901F0F3D8E1E71C38312006E9F1FEE6EBD5DDC6C21A403117EB00EEF2F9EFCFD3AEF01F1815E7D7E70DFEEFE8D7B6A9DCF5180BECE3FD00ECE9DBC8B3D8EDFA04EEF4000109FAF3E9E0B5D0EE050A150CF9F909F9FF0CE9E4D3E91F1216F900F7ED0DF8FAF1F6F91516120203F60C08F3FBFBF20CFCFDFF090509050606FCF51511050508010F070B04DFF402051D262416191705152F1E07D2000E0CF504E6E7E4161328330F1603EADAEFE5EAE4E7F0FB10151C07F804F4ECE8DCD8E3EE02F5F200EDF4E0F3DDE3EAE8D2DFE4F4F6C6BCF2DBFBEC04E5F2E8EBF7FF1FFFDE02DC11F708F5EEFCF90D0D0AFED703CFFB090506FA0AFEF00A040AD9F4D2F0132B110605100C1B04ECDCF2CED30A0A1E31240D0FF6F8EAE5EED6BFEBF7040A04FEE9E9ECCFF203E9F0D4D8DAD9E2F7EED8B8CCD601EDF7F8E9E2DAD7DCDAE8F2D9FDF005F2E9D6F7EBE9DFF1ECF0F1020FF2F3D8E7CDC5ECC8B6EAC9E2F3020CEBDFF4DACAD6DED5D3CFBBE5F70CF209E9E9F9DCF1FAEA03CBB9160EF0F0DCF4F501070C0012DAB20217E9D5EBEAEC241E0912FEB8CF1111F8E0E8E8B8E80816180AE0DFEC0F10F009D7AFDA000F1506D9E00AF1140505DBF805F9011A09DCEB18FCF6D0E9E6191908F4DBE9D2EC0FE2DAEADEF823FAEBDBE2CBBFE6FCE303190D22081101E1E3C7B1EFFCDC122E381E243A2D04EDDDD7E20D0C1C10371227271F290508D7FDF9D8E4DFE3EEE8E6E4E8F9FCF2FA08F9D0E4D7E0D4E2D2EFDCDFFC0416FD1007FE0EF7E7DBE9D4E2E109211619201D0D080909FFFCEBE0011F2220041E1003091A0CF501E8F32124040D0DF8FE130F0FFEE5CDFD14181D03E7D7D0E60607FBEF0211FE07F9F8F1CDD2F515172B1CF60102F2F3EFE6EDF5ED05FBF8DFE2EE1100D5ECD1EC0503D3EBDBCEC106F6DBDCEBE8F4FCECF6C6DDD5D6FC12111C08F5F9EF08DFE2E1D4D3F50D0E242A2A0C1A0C0EFE0BD9CBF5F30703F81D18081A2106F609F303F8FB050C02F60D0FF403FE13FC0AF30AF607F0F4F1DDE2FA07F4F6FFFE0D0CF810080C0A04EEECF3F6FE0FFF05180A1E09151A021A0D0A00070612F5E8EDEFFCF60C221008010D10F0FBEAC8DDF4F9FEF8F5050F0F03FF0907EEEE18FB0A1017FC01040904091BFC1DFD0C091EFD09F3061502100F0205091BFB0AF2000C07FBFAF10C0902E7F2F4EC081211FEF6F71005FAEBE7EBFA05070FFB0A12240F0C0F02FFE2E50DFCF7F40F091002140209F7EB0F1700FB0FFC0D0FFEFD00F3F3FF0212030F11F60C071104F4070CF309FE0A0605040CEAE6D4D7DCD7D8E3D0E3F0F60B040AFDFF0C02EEE6F4D8F2D4E80F101F140B060CF7E90D08F0E8E4122809FF0E03E70016FBFBFFD3F51A2012EEFEF5D2F41511090CC9FF072700F1E7D7CEE803190E01FF0410210303F7D9BCEF05201A07EFD10B15EAEAEBE6D804080407E7E4E6F60BEAD6F2F70A08E9F3F5D6CDEA14F7D4E3FAF3F2FAF6E8D1CBC50710DB010E0BFDFEFBF3ECCCC4D509FAF6141C0D20211712ECFFEEED00FBFD152E1230200E17170513F809FD03EFF9DDEBFEFBF6E4EE060A1002EADFD8D5E2DCEAE4E1F3EAE9E911E4F8F905ECD8D7D1E7E6E5EEEE001A1A1C2105F2EDE0EAE1FCE5EC0C09050A1708F7010AFDE8D3E2032F1B0AFDF1E3FF361714FED1C4EC291208E9F0CCE00E1E080FEFCAEF0811E7D6DAD5D30817FF13EBE102EA03ECE5F9DEFBF3F7F907F1CEE3F304DDE3DFEEFEFDECE5EEDEFBEDD1E0EFEEF609FEFC00F1CED4F2F7D1F4FE020501121BFFD7E7D1D8FCFB1B18392110231C1AF9DADDF2F90C0208091A261411091400FD01F31108F2F6F5FE0407090B03051412F90703F1F405FD09F8F20A0208FDF5F5F50314FBFBFC0C08FD0CF9F4FCFBFAEBF4DEB9C9C7F9EFF4F4F9F7FAE2DFBEA4BBC6C90301040FF3120FF9D7BCC0E8E3FCFA0C0AFA08F50309DA1A46431A100B0415EF0C13040F125C643E17F60A0E1611F90D0D1430495D07F902202A2109F007121A202E210A1A020A1F0DF10612FB0D0B2A2B272405F312F4FF0211F602102E2823F104EEF8FD0708121405211817051A13F0FB0809F6FCFA06111D090F0A0D11F8031210F3FEF40DF6F501FEF70A0911F3020309EDECE4EAF2DFC3E2DBF70A010EFF0F1CF506F7F9E8E7EDF0E1F6141615F91C0BF00B0E190CFAE0072404F9EFDCDEDE12F5081AF1F114152CE6E7D6BBDC0820F4F5D2FC07120BF8FAE6E8EF20270C0D180E12130FF10828F6E2F4151704EEF0F8070EF0F921F503FFF8F918F406FBFBF7DAE3F7140B02E7E5D1E90012FCE4020F041106F4DAE2EFE0F413F901350F0F180702E1D7DDF9EDF3F715112E2305180C08F4E9F6FF140912F310FC0F1812150901F5FA04FB110C1409F80FF9F7F70D05F40C03F7F7F5F6FEF6020811FC060011F4080006FA141B0B0505FAF8FBF60E0105FEF6F7EE05071B1CFD0111FDF8FFECEDE6E804FD020302FD0A030D02F3100E0C02CAEB020EFCFAFF03F1FE10273A20DAEE0616FD0C12F5F4111A3B3A48E8E5EDFC0A01001300111E3034300902F7F7020BF612071A1E1210162718090604F411FEFE080320FD14230A080FFF020D07150E1519F7FFFE03080914010BF3F9E8ECF8F904F20D0601FBFCF9020004F5F8FFF5FCF8FDF3F3070FF51307FF0C0C0309FF100A030610FF090C10FDF40F02F9FBFAFC10FF13050314070015110D03F8FC05FD0B0904F5E8F2F6120F0DFD150A0BF10CEFEEEAF3F20513FF080B11FC000702F7111E05D5F2F5091713050FF1FF0A1E3B28E4EE04091301FF130B0D2A313D3A12E8080B0EF30FF50109221C4E650F00001101F40EFCFA10291B2B251E0615090BF50500F8170E2817250D14090C020200FDF9F4101D2216151DFF150FF81316FDFD12EC0AF5FE0F0D1000121206F7FB02F802F1FD070D00F8FAFBF2F5F314F909020CFFF31013FA10F611100B13F6030EF507F306FA09F6F50E0C05091304100909F9070D12F5F6FFDDE7CFF6F1E90AECFFFC0AF5E1D5D2F0DEF00A0401FBEF040DF3F8DBEEDFEE13121009F40B0909FEF702182E05190915FB00FFF90F030B4046F5D1F40A1A06F10805071E424A27D5DA0A1C10120205F3F713121E0DFA07090714FD030502021E21FFF80A17ECE505EAEAFF0CF8FCF60F0803F2F7EDE6E6F01110FC001C0812090CFFECF0FAEC02F7FC05041D1E19060E0104F304F90812F90B0603FAFCFF0E00FBF91203140EFAF5E2E6E3EBF3EAF20AFFF8FD0D150208050AFFFDFB02F2071114170E2919121A070801FB09FC0416020B0917242EFBF7FC08F2F4051A141D2F020100E7E1F8FFFE08F5140F2206EBD1D1CCED1C1807F5080D0A091DFEEED7F120220EFFF8110CF9FA02EAF5F1EC0B14E5E5010C01F7FCE9ECC2C9D1F5EDF8FB13090BFB0406D4C7B5C8DDE8F1F40EF8FD200FECCBB4A9CAC9DEE8F8F8F7FAF50BF1D5E7DBE703FA02F70B1504140AFCFD08FDEA0E1101140510F70CEAEADDF708F3F90B071006F4E2EAECD5D3FBFBFBDFEEE606F1F6E9EFFAFCE2DCDEE8E2F4D7DF0107E8241723111400FEE7E7E5CCCF0501230E240C0F090B05F9E4EEED2F1A0F1A1E14071B1F1CFBE2D0DA20111919EEE5E0001E0B15E7E200140E0CFCD9DDBFE2061B0A0CE8E4DEF6EFF0EDCEDDDB111F2405E5CE14F1F5E5CDCFF2F400EEE9D8CAF304DAE5C1CEDEFDF9EBD5E3CAD6FEB6E1E8E2DDF4FAF8E2DFC5D6CD04D207301308FAFA1B04F1EDBAE5FB0409021F190A20270B1409FADD010EF9F6ECEFE6C3E0E4E2F5D9DCF20CFFEDDFECEF10F90AE901F6EA1207ECE1E51EFD0402FBECFAED00F6F8E9EC0D2B0114F102020BF818EEEFDCF02B312317E8EA16171A1D0000E9FB11292E0502DAF70008201A0501F4EE1A142428F4E1EAFB1914F807CECDEE0E271CEABECAC5E2DEF006D9E91511280B0EDBD3E9FDE1EEF1FC1D2721241EFF05010200B005D0E934182C151300F40922F4D00ACCDB0607EC0BF2040F1B16E2F1F803E5C6E8E7E10507091300DBE5F4F6E5C5E4D4D7DDEFF0F9BDC5F6F4FB0202EEDDEBEBFFF7DFE500020505D3E8FC1A05F8FEFDF7010CF6FED2E50502FB081B080D0F0DFEF2EBE2F208060BF4F0030601071FF9FDE9FD13010C01F8F610181226F5FA020B1A220C160FF90410102BF7E2F0F8E80220191011FEFD07E9F1FDD8D3FDE80B1304FAFCE0E2ED06E4E2F403101F05EDFDF9EFF4F5FB02EFF3FCF803F2FEF5FDFC0209F7FBDAF2F80DFC04150FF9F5EDD800F0ECDE07F5190D17160F13F3D70302E1CBD2DEEB031C1D14EBD6D1FDF2F7FFF9ECFAE906FFF0FA0203ECF4F6F1E908E9E9F507FBF503F40A01F6FD020C0F1714F806FC06FC09F1EAFEF6010F191C0AFDF00502FC08FCFE0CF515FB08FF0507100DFEFDF60AFE18180D0A16160EF50AEC04F713FDEDD3F7FF232D13F400F3FFF2EFD1D2EFF0F831260CFBE6E9F6FCF509F808F804FF0A0003F402FCF30F031B20E0CEEBE90701FF010502111304FEF3FAF6F6F1FC0106FBEAEB07F30117161C0502F906FA02FFE3D3DDEC1C2B0C0BF0F403ECF8E9F6FDF5FAF2F8F603EBEBEDEEEAF9F60804EA02EAF2F106EBEC00F7FAFBEB01F3F0F8F0EBEB05F9FDFC00F1EEF8FCFE001D0FF8E9090A0CFBEDE314FC1A062003F90FFFFBEEFFE0FC0D221A0A141E1A071803FCFAFE172319161E05151A221D02FDEA030D1515181D221910142309EEFB1FF501002C152211FF150301F907F0E5EF1418190404F9E2F5F10AECE804F925360500EEFEEE01D8F8F4E0FC261A2A010DF4FC0901E4F1D3DC1E181414171505FB21F803FDEDF7F4050C1E101717090DF709F8F2EA02F60612262C130CEDE903FBE9E9EEE3D6E7EBE8F7FBFBF2F60306D9F2ECEDE4DCF1EAF1DDE10601F1F2FDF4F1EEF805FBF0F5F51708E4D3FAFB040912F90207F500F7F7F1F904070B080A0D19030F0A080100070B0803FE0318231C25100BE6FD0721150C32F100F90B1AFA05E0EA0E10232C2C15E1EAEA0518FD00E0D3ECF5081E01EFE7D7F90DECF8E4ED01F81227FA0500FE10F6DAFAD1FCFF082315FF1510231BF9D1F4EB081D0C1513160D0D2005DCE2E1E2F117FC0F1AFF0B050D03E3F403B5E6F804EAF400FF0EEE06E50610F0DBF4D3E2D6F1F4F0C2D802F1FAF90AF10200FD03EFFBF0FCEDFB00EEF0F0EFEDF2FDF909050AF102ECE9E90D0E00000E08F4FD01F0FDE9F3EFF703170F0F0506FCF90706EFF0F3EB11F705FE0A180C04F3F600FC06F4E5D6D3E817312912F7F9FBFE01D7CDB6ADE5301D160A1707F0FE04FBDAFBE3DD031AFEF4E80B01EB061D3045F9E3DBEDD5D6FBFF0101F502283203D6E1D1E8DF0DFAF4FDFE00041C08F30204F60AFCF4E9E9EBD4E2F3062A250FFCF9F003E8FEF4FDD7E1F305F6FA10F90C05EEEDEEFFFDE2E0EA01EB0107F3F009FAF3FBF7F1E8E6FBF9070C09EEEFFDF21214FF0709FFFB02F20DFB0EE6F403151C1B040A07FD0300EFF6FC00FC131A26131404030E060AEFE711171501F40F111D161F0BF9F7120602F8E8D8F931504C4108F608E9DFE0D8FDDF021F2E16FE100AF3E2F1F30C071FED09E0D9DEFFE706FAF82614360EDBF7E1DDF1D903F0F10305182815F30E0A00F3DAF5F9DE070E05182E142C120900EE00EEF2DBD3EC0D243B402BF30403FDF1ECEDD0ACC7E1F003FAF1FCFAF2050AF7E9F203FFFFE8F900EFEAF9E8FC01F7EEEDF6ECFBEBF1F4F0F2F0E8F809F005F706F0FE02F304F4EBF606FCEFFBEAE5F9F309F1F7ED01E9FBFDFB04E6E8BFE0E503F8F4FCF5FC03DDF7F6F4DCDFF3F9ECEEF4F6EAEAE8C6D1ECEBE2E4F1E4F2F5F4EFEFF1C0A2D3EEF5ECEFFC01FBFFF203F0D5B4CBDB0C08FDEB08E802EDFFF1EFD4DBDF1501F3F70AEEEBEAE4E2DADAD0E9EBFBF7E9F5F501F2EEC8E0D2DAF6F3F3FB0AEFFFEE08F2DDD9C4C8EEF2FDED08F1F4F704F0ECEDFA04E7E6F5F40AEC0203EFF9FF0507F30AF2FEFFF80208FA060A01ECF9E902EDFDE9FE080407F5E9FFF001030BF3F4FCEBFBFFEAF7F0F2FAE0EFEBEF0601EF080A04E901F1EDD6C4B4C8FFFFEAFEF0F7E7E7F9E7C7DFDBCFEDF704F1F3F8F5F3DAD2D0DAF9ECF5F1FA0502F2F2EAD0A8C4D6DCF2F106EBFCE9EEFFF0E5C9ABB0BB02FAECF3E9EF0808F8E9E6C7A9C8FAE9F405F7EEF707FEEBE5CECCF1FDF8ED0903F40101E8EBE5B6B0E5F302E605FD02FCF4EFE1CBC0D3F9F2E8EB05F5FD04EBFB00F7F4E8F600070100F0F7F9FEF40A0800090902F3FFF4FB04010AF0F9F001F6FAF1FBF008F60A0AFFF304EB02FEFEEBF8EBF5F906F6E9FEFCF3FAEEF5FEFA0BEBF302F3ECEF1316232B1907FCEA04ECFC0701F00C090618090706F0F8F309E9EAF2F301E2EB1A17211D040F01E9F7E3E3D2D1F0171F1C1F17EFF705FC01D1EEEC1A1B030606EEFFE900FA121A15131210E4CDE1F8FA06020917273B0FF6EAEDEFE70607F0F4EB062024080602FAF40D04010309E8EB07FC031A1E11130C0CEDEAF4F3F8DEE7040C150303F4EFE801EC0603E0F9F9FAEDF0F508F1ED00ED0AF0EAF009F1F001F602F0F7ED01FC05FA191C0811FB0CFA01FCEBF9F10405FF070913FFFC0C10EEF0F5EE030304FCFE0EFB030B16FCEE05FBF5EFFB0A130006201104F508FEF5F3F1EB0018150D08F3FC09EFECE3E2EF08ECF8131C17F2D8FAEA02FD0F1E0CE3EE19261F06F9F8F5EDF601F1EDC5E818301003F4F0F8EBF7E7ECBEBDE8FB01F9E3E9F103EEECE3D0E9F0FF09EEE7EFEF02F7F3D9DBCD0D0C231F01DBF30200F7EEE8F802F0EA0BF90AFDFAEDEFF903EB02F0EDEF0B02EE08FAEC06FC02FAF9F6E1E2FCEB00F204FEE7EBF4E2DFD0E3D5F4E8E6E6E8E7F8FEEDE4FB05180027081C01FE0CF601CBDD00050CFF0C230E11FD07F2E2FCFCFBFA1504ED04F70C0A0CFCD7F1011E1E151EF5EF03221E2118F206212E212728F40B1221282F09E9D2F500082321091C090303F5F6E5CEC6F5F01F1523FD04F2EED5D5FADAF4D604140C13FCF4F1E3E6BFE5E40207F4F9FB080406F9FAF1E4EFD6F80B0F150C1EFA0CFD0DFDE6DADECBEE02010F0500000EFDDAF001C0D8DADCEBEBE8ECEEDBAEC6F6FB0D0B02EFFFD3E5EAE1E6E3EE04FAEDE1FBC3C0D7D6CECDD7CAD8E6FAF2D9B6BCC8E0DBD0D0DEB1BEDCEFC5C3BCF1FEF1EFF5F6E9E9D6BAE5D8DE030202F3F41BF1FEF4C9B1FED71B2D230AFCEB0CFF110AD9AAE8E2412E240AD7F82C192F2BDACCD903191C25FDF2EC1D171009C8B601FA000F0ADFDBE1091B09EAB9CEE6E3F2FF02CBD0E1F8F608DBD9E4EFEAE2E1E6DCE4F4FA10FAEEFFE5FDE4E5DC0AE8000308FB031D07D90904051F120E150D1F1D182EF0E1F20F071722201F27261418190FFF0710F7F4E8E2DDF8D9EAEA0C03F10BFA02DDD8F3EAF2EAE5E1CDFC0801D1CDE2EDFB1AFBF7E2E4E7D204FCE5F4E8F216261A310AEBDFC4FBE5DAE403FFFA0F18FC0903DDCDF1DBE2030D170510170E1820FAE108D8070B1618FB050D051EFFFECBEDFD11FF051AFDFBF8FCF4DEE2C1FCF3E7F101030E00F9F0FAF0D4CBFBE6DFECE8F302EFF400DFF8D9F2FB06EDEBECE801E5ECFE01EFF600FDF8EAFDED01E903ECF303FD140BF6F00B18031A0DFB0506131E20E30100EE08F90E0BF7FBFAF50DF9F0FF03F0F20D0AECED06F7F40604EE03090205F3F1F1F5D9EDEFF2F8080404F3EFF50408010CF808E2FDEA090BF2F7040413122919F8EFF103F6EBE40F0605281CF3E3E3CDEC0101FCFC0DF80C19110E0A0AECF7020806FCE6F2FEF41D18E9F1E3DCF50BFB08EFD9BDFE1AEDDEE1F2E5F104F5EFF3DAE0051C0BF6CFE2F9090AEBF3FFF9D604250DEAF4F509FA0A0DF005070B031D16FDFCFBF804070EFAF30B080F1614EFFDFA01ECF80800FF111A0D11FDE2F8E6F40A0E000CFB08FEFEEA07FEFAF804F60CF00007FE0FFBF3F3FFF3F4FCF3F9F6F60EF7F0ECF3F6CDCFC7D200F80EF6DDD4D2E3F20604FEFED3C5EA01EADAEDF6F31213210902FCCDD709DBDA021D1E17271AFC03E2D9B1EBE1150E1313160B08140B03E0D4FCED190D0E1FFE0E10121BF8E1EAF9080EF8050C0F04030EFFDDBDE00AF802030003060A0C02F2E6BBE200F2FF040701E7030ADFE8E8F30807DEE7EBF6E6F1FDF7E4EAEFFB0008F2EDE501F801FEF2FBF903050D04F8EE02F30E01060B10211209020101191909121021112E1EF106F90909E7EEE2E3E6DED8EDFEFCE5F3E9F8F0EBF3F7DBE0D5DBE6E5E6E8FAE3BFEEFB08E4D6DCD2DAD4D7FEE0D6D9E7EDEDF60305F700D9E2FDEFEC09F209F5040BF4F504FDDCFECEDF17051C15FDE7F7150C0AE6D6D3FB22210C21FD04FC232E00E9F2F8F1060F140AF4000B0709F2D5C7E9EC101B09F4EA131914E2F3C8D5FBD3F8FCE6E3F10DF8F5E1FBEAE4EAE9E3F8F2D7DFEC02F7F303F7EFD4DAF3EDFDE5F70EFF06101403FCECE71510030F0D152B253320FE010EF82C0F0E14211E1B321F0BF00EFCF30604ECEFF10DF10EF006F90808EEF006F5F7E6FDF3F0FB0902F9FDEFFEEE0EEEEEE5E906E7EFFDFC0507F10C022824EDF6D2E3EDF0FD08EB1819324421061CE2D2EDFC03FCF10C1434150E03F2DCDAEDEF07FB04F1F5D6E8F6E8DEEF07150CF90DFDE7DDCBB4DB06EA0EFC17F20CF8ECFBE0BABE2A102506FCFCEF010DF7F5F9DEE11646160814F3F007ECFDEC18FC1A2F14F20812FDFC030A09FF12002BF9EADBE8EEFFF30BEFFE0B0D0009FDFEF906F30A03F907F3FD13110C09231C04FA06010A040AF8EFFF02F9EFE3F40501F707FB0A01E8EFE4FCD2E6E0D6F2FEF300F3F3FB1117161814FFDBD2DD0DFEE702FD0314271AF1BCB7AAB1EEF6EE16020C263D18F3E5D1B7C304ECFD111712232D1F03FB02E2DBF9E21A0305F5EC3015F703F9D9E404F0FCEEF5D4D92334060CF9CCF6F700E7EAE8BCD3161D1E01E6F1E0F0FEDA03D6D6DF0A231F19EB04EDEEEFEAF9F502040D0703F7E0FAEC080B01F1FAFC1006FEF30DF3FFF8EEF618151A100F2A0600FDECE90700F401F3110F0B061004F50EFBF0EFF208F10202FBF305F9020AF90A05FA02FAECEF090C0C0B0209FFEF090A0C080AFBEFF9F905070505FE0A07F4FC08F7E7E4EBE7E8FCFFF2F30709FBF90B0BFBE5E3E4051304FAF305EDF9EAE6F0EEFDF3E8FD0507F70BFEE2E0C5D5FCEBE5F10EFBFCFDED04F8CAE0F4CEECF4F801F800FD08EEFDE8EFEDF0E0EC09FB030A0AF2FE080B0F030415F5070C0F0C0EFE0AFA1B07142404F00D0B07FF0700F008FD050E08FFF70B000BEFEFF3FD0A07EFF8FFF3FEEBF20101FF0AF3F1FAEEF903F7F5FC080C0BEFEE08F90808FF08FB0400F4F106F60BFBF3F2FC06FA0A0707F2F9F802FEEF02FCEBF811040DFBFBFD01FF0CF8EEF0E1C4A7C7F2F7FCEDEC02FB0BFE05E7BEB2C7E80AFBFAFD0DFC0004F9D5E4E8D4DCFCFD0FFFF70BF7DFEEC0CCD5DEF5F6F201F7ED0504E2DBD4D1BCE3FAF801F4FEF1F101EBF5DFECE9FAFC03FF0CF0EF07F2F4FAF81D0003070601F709F7EDFA18100422270C000FECFDF9F8021001F91A1017F506F6EBF708F4040C05F0E6F4EFE805040602F0F102F205F1FC01F7EAEA050905EFF402F8FF0600F9F209FE0803F2F20809FAF60E0A02FEFCF107F60B0B05F0F2F107EFF2E9E5FCF7F4F5050708000B04FE03EAE7DAD5DBFD09F8FBF50A2534341C16ECEFE8DCE5FDF4040A1A1E1A00F401E3F9F5EB0CF90C18100103E7DCFCF40E0EF80C0D06F3DFEA1C0BF3FD0511F50BFDF3E5EBCAD033001A1615EFEB07030601F2DEF0191912FE13EEECEFF60309FEF202191904F713FFFBF503FA03F00209F3FCFCE6EAFAFBECF002FFFDFFFFF7E5E5F206120DFAFAFF03FD170E050407000815F3EFEEF5FD09F105EBF20000F0FB04070CF2F605EFF005FEE8E7E7F002F802F1F3EC061E2D201901F0F1E602F1F8EFF9001B202C1C0D1301F7FDEFFB05EF0615201618FBF9F6F4F0FD04EFE9F414232C272BF1F9F5F3EB0EF1CFCDD72E1408E3B3DAE5F701E7CED2D32037F5C9B7C5D0F00503F5F3D2143F3507C493CED0F0070506FE0B011C22FEC9B5DCFDFA00080308061B2C2807EAB9E1FE0A05070312091D1705FEE1F8F4FA0505EF0101FEFEF4DED5E4DDDFF300F7F2FE02FB08F6FBF6F7F8090C03F805EAF1EFF8E503F2E90AF7FCF208E8E1FA02F8F6F4E6F8E1D7F2FDF003FEE9D6D1EDF1F3F0D7E6E8E9E7D7C6DCE5ED00311E190F07EFD7E9EBD3DEE8ECFE2E1A250209DFC9C9C7EEEAF5F700FDEE120703E9B6ABC3FB16050D0D0812160A06EFE6C6D80B14091E0A1728030B0CFED8C9C9040721210E020D0EFFE9D4AFCBD9D6F414180AFD090607F8EAAFE1E2E1DDF8E6D8F6DEF4FAEBDCE0EBB0EDF1F1F5F8EAF5E3EFF9081FEAC1D906F0F1ECE807F905262115F70DF52B261C1D14241B19221BFA12\"\n", + " }\n", + " }\n", + "#-}\n", + "\n" + ] + } + ], + "source": [ + "print(coreai_program)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43bfc6d2", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 9e66ae11b39ba931d7146698f564c580f42fc135 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 25 Jun 2026 17:04:35 -0700 Subject: [PATCH 02/15] inspect --- docs/src/tutorials/mnist_quantization.ipynb | 136 +++++++++++++++++--- 1 file changed, 118 insertions(+), 18 deletions(-) diff --git a/docs/src/tutorials/mnist_quantization.ipynb b/docs/src/tutorials/mnist_quantization.ipynb index 19a37d4..37503ba 100644 --- a/docs/src/tutorials/mnist_quantization.ipynb +++ b/docs/src/tutorials/mnist_quantization.ipynb @@ -108,7 +108,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "id": "8671c764", "metadata": { "execution": { @@ -249,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "id": "f48fdf9b", "metadata": { "execution": { @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 8, "id": "878f7025", "metadata": { "execution": { @@ -314,7 +314,18 @@ "shell.execute_reply": "2026-06-02T20:30:29.723620Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 9.91M/9.91M [00:01<00:00, 6.27MB/s]\n", + "100%|██████████| 28.9k/28.9k [00:00<00:00, 368kB/s]\n", + "100%|██████████| 1.65M/1.65M [00:00<00:00, 2.57MB/s]\n", + "100%|██████████| 4.54k/4.54k [00:00<00:00, 3.32MB/s]\n" + ] + } + ], "source": [ "# Download and instantiate datasets\n", "DOWNLOAD_PATH = Path(SAVE_DIRECTORY) / \".mnist_dataset\"\n", @@ -326,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 9, "id": "35dbf869", "metadata": { "execution": { @@ -355,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 12, "id": "3bbae265", "metadata": { "execution": { @@ -365,10 +376,30 @@ "shell.execute_reply": "2026-06-02T20:30:29.735702Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MnistNetwork(\n", + " (model): Sequential(\n", + " (0): Conv2d(1, 12, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (1): ReLU()\n", + " (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (3): Flatten(start_dim=1, end_dim=-1)\n", + " (4): RMSNorm(\n", + " (norm): RMSNormImpl()\n", + " )\n", + " (5): Linear(in_features=2352, out_features=10, bias=True)\n", + " )\n", + ")\n" + ] + } + ], "source": [ "basic_cnn_model = MnistNetwork(num_classes=10)\n", "\n", + "print(basic_cnn_model)\n", "# Print summary of model\n", "# summary(basic_cnn_model, input_size=(1, 1, 28, 28))" ] @@ -391,7 +422,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 13, "id": "91c17bb8", "metadata": { "execution": { @@ -406,7 +437,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.2581\n" + " Epoch 1: loss=0.2397\n" ] } ], @@ -434,7 +465,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "id": "fcb3fd97", "metadata": { "execution": { @@ -449,7 +480,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Baseline accuracy: 0.9664\n" + "Baseline accuracy: 0.9716\n" ] } ], @@ -476,7 +507,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "id": "7434e08f", "metadata": { "execution": { @@ -491,7 +522,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "W0623 15:14:38.736000 5626 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", + "W0625 10:40:39.879000 26186 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", "scikit-learn version 1.9.0 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.\n", "Torch version 2.11.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.7.0 is the most recent version that has been tested.\n" ] @@ -518,7 +549,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "id": "0218c7aa", "metadata": { "execution": { @@ -549,7 +580,49 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 18, + "id": "a3ac9f18", + "metadata": {}, + "outputs": [], + "source": [ + "def show_externalize_state(model, label):\n", + " print(f\"\\n========== {label} ==========\")\n", + "\n", + " # 1. Per-submodule marker attributes + forward swap\n", + " found = False\n", + " for name, mod in model.named_modules():\n", + " attrs = {\n", + " a: getattr(mod, a)\n", + " for a in (\"_externalize_name\", \"_externalize_op_name\",\n", + " \"_externalize_config\", \"_original_forward\")\n", + " if hasattr(mod, a)\n", + " }\n", + " if not attrs:\n", + " continue\n", + " found = True\n", + " print(f\"\\n submodule [{name}] type={type(mod).__name__}\")\n", + " for k, v in attrs.items():\n", + " print(f\" {k} = {v!r}\")\n", + " # forward identity is the clearest signal of the patch\n", + " print(f\" forward = {mod.forward!r}\")\n", + " print(f\" forward.__name__= {getattr(mod.forward, '__name__', '')}\")\n", + " print(f\" forward.__module__={getattr(mod.forward, '__module__', '')}\")\n", + "\n", + " if not found:\n", + " print(\" (no submodules carry externalize markers)\")\n", + "\n", + " # 2. Global torch.library registry under our namespace\n", + " ext_ns = getattr(torch.ops, \"coreai_torch_ext\", None)\n", + " if ext_ns is None:\n", + " print(\"\\n torch.ops.coreai_torch_ext: \")\n", + " else:\n", + " registered = [n for n in dir(ext_ns) if not n.startswith(\"_\")]\n", + " print(f\"\\n torch.ops.coreai_torch_ext ops: {registered}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, "id": "d1fd4ba2", "metadata": { "execution": { @@ -560,6 +633,30 @@ } }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "========== BEFORE ==========\n", + " (no submodules carry externalize markers)\n", + "\n", + " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n", + "\n", + "========== AFTER ==========\n", + "\n", + " submodule [model.4.norm] type=RMSNormImpl\n", + " _externalize_name = 'model.4.norm'\n", + " _externalize_op_name = 'model_4_norm'\n", + " _externalize_config = ExternalizeSpec(target_class=, composite_op_name='rms_norm', composite_attrs=['axes', 'eps'])\n", + " _original_forward = \n", + " forward = .patched_forward at 0x13b28fba0>\n", + " forward.__name__= patched_forward\n", + " forward.__module__=coreai_torch.externalize\n", + "\n", + " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -590,7 +687,7 @@ " )\n", ")\n", "\n", - "\n", + "show_externalize_state(wo_model, \"BEFORE \")\n", "markers = mark_for_externalization(\n", " wo_model,\n", " [\n", @@ -602,6 +699,9 @@ " ],\n", ")\n", "\n", + "show_externalize_state(wo_model, \"AFTER \")\n", + "\n", + "\n", "wo_quantizer = Quantizer(wo_model, wo_config)\n", "wo_prepared = wo_quantizer.prepare(example_inputs)\n", "print(f\"Prepared weight-only quantization with dtype={WEIGHT_DTYPE}\")" @@ -705,7 +805,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "14a00586", "metadata": { "execution": { From eb03e2ce2665a1714da2e0afa6ddbdd9fd278635 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 30 Jun 2026 17:25:05 -0700 Subject: [PATCH 03/15] subexport_and_restore --- docs/src/tutorials/mnist_quantization.ipynb | 196 ++++++++++---------- 1 file changed, 96 insertions(+), 100 deletions(-) diff --git a/docs/src/tutorials/mnist_quantization.ipynb b/docs/src/tutorials/mnist_quantization.ipynb index 37503ba..d1a0af0 100644 --- a/docs/src/tutorials/mnist_quantization.ipynb +++ b/docs/src/tutorials/mnist_quantization.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 26, "id": "954e0f62", "metadata": { "execution": { @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 27, "id": "c56dc8ec", "metadata": {}, "outputs": [], @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 28, "id": "a55c2a50", "metadata": { "execution": { @@ -108,10 +108,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 3, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -126,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 29, "id": "978adffb", "metadata": { "execution": { @@ -157,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 30, "id": "e0b7cfe7", "metadata": { "execution": { @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 31, "id": "8671c764", "metadata": { "execution": { @@ -249,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 32, "id": "f48fdf9b", "metadata": { "execution": { @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 33, "id": "878f7025", "metadata": { "execution": { @@ -314,18 +314,7 @@ "shell.execute_reply": "2026-06-02T20:30:29.723620Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 9.91M/9.91M [00:01<00:00, 6.27MB/s]\n", - "100%|██████████| 28.9k/28.9k [00:00<00:00, 368kB/s]\n", - "100%|██████████| 1.65M/1.65M [00:00<00:00, 2.57MB/s]\n", - "100%|██████████| 4.54k/4.54k [00:00<00:00, 3.32MB/s]\n" - ] - } - ], + "outputs": [], "source": [ "# Download and instantiate datasets\n", "DOWNLOAD_PATH = Path(SAVE_DIRECTORY) / \".mnist_dataset\"\n", @@ -337,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 34, "id": "35dbf869", "metadata": { "execution": { @@ -366,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 35, "id": "3bbae265", "metadata": { "execution": { @@ -422,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 36, "id": "91c17bb8", "metadata": { "execution": { @@ -437,7 +426,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.2397\n" + " Epoch 1: loss=0.2546\n" ] } ], @@ -465,7 +454,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 37, "id": "fcb3fd97", "metadata": { "execution": { @@ -480,7 +469,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Baseline accuracy: 0.9716\n" + "Baseline accuracy: 0.9688\n" ] } ], @@ -507,7 +496,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 38, "id": "7434e08f", "metadata": { "execution": { @@ -517,17 +506,7 @@ "shell.execute_reply": "2026-06-02T20:31:32.431486Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "W0625 10:40:39.879000 26186 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", - "scikit-learn version 1.9.0 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.\n", - "Torch version 2.11.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.7.0 is the most recent version that has been tested.\n" - ] - } - ], + "outputs": [], "source": [ "from coreai_opt.quantization import (\n", " ModuleQuantizerConfig,\n", @@ -549,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 39, "id": "0218c7aa", "metadata": { "execution": { @@ -580,7 +559,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 40, "id": "a3ac9f18", "metadata": {}, "outputs": [], @@ -613,6 +592,7 @@ "\n", " # 2. Global torch.library registry under our namespace\n", " ext_ns = getattr(torch.ops, \"coreai_torch_ext\", None)\n", + " print(f\"Ext_ns: {ext_ns}\")\n", " if ext_ns is None:\n", " print(\"\\n torch.ops.coreai_torch_ext: \")\n", " else:\n", @@ -622,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 41, "id": "d1fd4ba2", "metadata": { "execution": { @@ -640,6 +620,7 @@ "\n", "========== BEFORE ==========\n", " (no submodules carry externalize markers)\n", + "Ext_ns: \n", "\n", " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n", "\n", @@ -650,9 +631,10 @@ " _externalize_op_name = 'model_4_norm'\n", " _externalize_config = ExternalizeSpec(target_class=, composite_op_name='rms_norm', composite_attrs=['axes', 'eps'])\n", " _original_forward = \n", - " forward = .patched_forward at 0x13b28fba0>\n", + " forward = .patched_forward at 0x1393e6e80>\n", " forward.__name__= patched_forward\n", " forward.__module__=coreai_torch.externalize\n", + "Ext_ns: \n", "\n", " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n" ] @@ -725,7 +707,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 42, "id": "db4e1e88", "metadata": { "execution": { @@ -740,7 +722,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight-only PTQ accuracy: 0.9666\n" + "Weight-only PTQ accuracy: 0.9687\n" ] } ], @@ -777,7 +759,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 43, "id": "ad3be560", "metadata": { "execution": { @@ -805,7 +787,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "id": "14a00586", "metadata": { "execution": { @@ -875,7 +857,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 45, "id": "cab3a185", "metadata": { "execution": { @@ -910,7 +892,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 46, "id": "a47189f5", "metadata": { "execution": { @@ -925,7 +907,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight + Activation accuracy after prepare + calibration: 0.9609\n" + "Weight + Activation accuracy after prepare + calibration: 0.9645\n" ] } ], @@ -963,7 +945,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 47, "id": "1209c6c2", "metadata": { "execution": { @@ -973,27 +955,46 @@ "shell.execute_reply": "2026-06-02T20:32:37.588767Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Epoch 1: loss=0.0905, accuracy=0.9745\n", + " Epoch 2: loss=0.0808, accuracy=0.9762\n", + " Epoch 3: loss=0.0741, accuracy=0.9788\n", + " Epoch 4: loss=0.0686, accuracy=0.9793\n", + " Epoch 5: loss=0.0641, accuracy=0.9799\n", + " Epoch 6: loss=0.0603, accuracy=0.9794\n", + " Epoch 7: loss=0.0572, accuracy=0.9806\n", + " Epoch 8: loss=0.0541, accuracy=0.9818\n", + " Epoch 9: loss=0.0519, accuracy=0.9814\n", + " Epoch 10: loss=0.0494, accuracy=0.9828\n", + "\n", + "QAT final accuracy: 0.9828\n" + ] + } + ], "source": [ - "# QAT_EPOCHS = 0\n", - "# qat_optimizer = create_adam_optimizer(wa_prepared, lr=1e-4)\n", + "QAT_EPOCHS = 10\n", + "qat_optimizer = create_adam_optimizer(wa_prepared, lr=1e-4)\n", "\n", - "# wa_prepared.to(\"cpu\")\n", + "wa_prepared.to(\"cpu\")\n", "\n", - "# for epoch in range(QAT_EPOCHS):\n", - "# with wa_quantizer.training_mode():\n", - "# epoch_loss = train_epoch(\n", - "# model=wa_prepared,\n", - "# train_loader=train_loader,\n", - "# optimizer=qat_optimizer,\n", - "# loss_fn=torch.nn.CrossEntropyLoss(),\n", - "# )\n", + "for epoch in range(QAT_EPOCHS):\n", + " with wa_quantizer.training_mode():\n", + " epoch_loss = train_epoch(\n", + " model=wa_prepared,\n", + " train_loader=train_loader,\n", + " optimizer=qat_optimizer,\n", + " loss_fn=torch.nn.CrossEntropyLoss(),\n", + " )\n", "\n", - "# qat_acc = eval_model(wa_prepared, test_loader)\n", - "# print(f\" Epoch {epoch + 1}: loss={epoch_loss:.4f}, accuracy={qat_acc:.4f}\")\n", + " qat_acc = eval_model(wa_prepared, test_loader)\n", + " print(f\" Epoch {epoch + 1}: loss={epoch_loss:.4f}, accuracy={qat_acc:.4f}\")\n", "\n", - "# qat_prepared = wa_prepared.cpu()\n", - "# print(f\"\\nQAT final accuracy: {qat_acc:.4f}\")" + "qat_prepared = wa_prepared.cpu()\n", + "print(f\"\\nQAT final accuracy: {qat_acc:.4f}\")" ] }, { @@ -1018,7 +1019,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 48, "id": "76f11a15", "metadata": { "execution": { @@ -1049,7 +1050,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 49, "id": "f2b809f3", "metadata": { "execution": { @@ -1073,17 +1074,17 @@ " quantize: \"i8[1, 1, 28, 28]\" = torch.ops.coreai.quantize.default(x, b_activation_post_process_0_scale, torch.int8, b_activation_post_process_0_zero_point); x = None\n", " dequantize: \"f16[1, 1, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize, b_activation_post_process_0_scale, b_activation_post_process_0_zero_point, None, 0, torch.int8); quantize = b_activation_post_process_0_scale = b_activation_post_process_0_zero_point = None\n", " \n", - " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/conv.py:553 in forward, code: return self._conv_forward(input, self.weight, self.bias)\n", + " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/conv.py:553 in forward, code: return self._conv_forward(input, self.weight, self.bias)\n", " convolution: \"f16[1, 12, 28, 28]\" = torch.ops.aten.convolution.default(dequantize, constexpr_blockwise_shift_scale, p_model_0_bias, [1, 1], [1, 1], [1, 1], False, [0, 0], 1); dequantize = constexpr_blockwise_shift_scale = p_model_0_bias = None\n", " \n", - " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/activation.py:143 in forward, code: return F.relu(input, inplace=self.inplace)\n", + " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/activation.py:143 in forward, code: return F.relu(input, inplace=self.inplace)\n", " relu: \"f16[1, 12, 28, 28]\" = torch.ops.aten.relu.default(convolution); convolution = None\n", " \n", " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", " quantize_1: \"i8[1, 12, 28, 28]\" = torch.ops.coreai.quantize.default(relu, b_activation_post_process_2_scale, torch.int8, b_activation_post_process_2_zero_point); relu = None\n", " dequantize_1: \"f16[1, 12, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize_1, b_activation_post_process_2_scale, b_activation_post_process_2_zero_point, None, 0, torch.int8); quantize_1 = b_activation_post_process_2_scale = b_activation_post_process_2_zero_point = None\n", " \n", - " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/pooling.py:224 in forward, code: return F.max_pool2d(\n", + " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/pooling.py:224 in forward, code: return F.max_pool2d(\n", " max_pool2d_with_indices = torch.ops.aten.max_pool2d_with_indices.default(dequantize_1, [2, 2], [2, 2]); dequantize_1 = None\n", " getitem: \"f16[1, 12, 14, 14]\" = max_pool2d_with_indices[0]; max_pool2d_with_indices = None\n", " \n", @@ -1091,21 +1092,21 @@ " quantize_2: \"i8[1, 12, 14, 14]\" = torch.ops.coreai.quantize.default(getitem, b_activation_post_process_3_scale, torch.int8, b_activation_post_process_3_zero_point); getitem = None\n", " dequantize_2: \"f16[1, 12, 14, 14]\" = torch.ops.coreai.dequantize.default(quantize_2, b_activation_post_process_3_scale, b_activation_post_process_3_zero_point, None, 0, torch.int8); quantize_2 = b_activation_post_process_3_scale = b_activation_post_process_3_zero_point = None\n", " \n", - " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/flatten.py:55 in forward, code: return input.flatten(self.start_dim, self.end_dim)\n", + " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/flatten.py:55 in forward, code: return input.flatten(self.start_dim, self.end_dim)\n", " view: \"f16[1, 2352]\" = torch.ops.aten.view.default(dequantize_2, [1, 2352]); dequantize_2 = None\n", " \n", " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", " quantize_3: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(view, b_activation_post_process_4_scale, torch.int8, b_activation_post_process_4_zero_point); view = None\n", " dequantize_3: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_3, b_activation_post_process_4_scale, b_activation_post_process_4_zero_point, None, 0, torch.int8); quantize_3 = b_activation_post_process_4_scale = b_activation_post_process_4_zero_point = None\n", " \n", - " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_5626/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", + " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_51671/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", " model_4_norm: \"f16[1, 2352]\" = torch.ops.coreai_torch_ext.model_4_norm.default(dequantize_3, p_model_4_weight); dequantize_3 = p_model_4_weight = None\n", " \n", " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", " quantize_4: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(model_4_norm, b_activation_post_process_5_scale, torch.int8, b_activation_post_process_5_zero_point); model_4_norm = None\n", " dequantize_4: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_4, b_activation_post_process_5_scale, b_activation_post_process_5_zero_point, None, 0, torch.int8); quantize_4 = b_activation_post_process_5_scale = b_activation_post_process_5_zero_point = None\n", " \n", - " # File: /Volumes/Data/src/oss/coreai-optimization/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/linear.py:134 in forward, code: return F.linear(input, self.weight, self.bias)\n", + " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/linear.py:134 in forward, code: return F.linear(input, self.weight, self.bias)\n", " permute: \"f16[2352, 10]\" = torch.ops.aten.permute.default(constexpr_blockwise_shift_scale_1, [1, 0]); constexpr_blockwise_shift_scale_1 = None\n", " addmm: \"f16[1, 10]\" = torch.ops.aten.addmm.default(p_model_5_bias, dequantize_4, permute); p_model_5_bias = dequantize_4 = permute = None\n", " \n", @@ -1152,6 +1153,8 @@ "name": "stderr", "output_type": "stream", "text": [ + "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", + " return cls.__new__(cls, *args)\n", "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", " return cls.__new__(cls, *args)\n" ] @@ -1175,14 +1178,6 @@ "text": [ "Exported: exported_model.aimodel\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", - " return cls.__new__(cls, *args)\n" - ] } ], "source": [ @@ -1196,6 +1191,7 @@ "cast_to_16_bit_precision(exported_program)\n", "print(exported_program)\n", "\n", + "markers.subexport_and_restore(exported_program)\n", "coreai_program = TorchConverter().add_exported_program(exported_program, externalize_markers=markers).to_coreai()\n", "coreai_program.optimize()\n", "\n", @@ -1208,7 +1204,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 50, "id": "79b829c0", "metadata": {}, "outputs": [ @@ -1217,7 +1213,7 @@ "output_type": "stream", "text": [ "module {\n", - " coreai.graph private noinline @model.4.norm_0734ac9a(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", + " coreai.graph private noinline @model.4.norm_6e2877fa(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", " %0 = coreai.constant dense<1> : tensor<1xsi32>\n", " %1 = coreai.constant dense<9.99999974E-6> : tensor\n", " %2 = coreai.cast %arg0 : tensor<1x2352xf16> to tensor<1x2352xf32>\n", @@ -1232,7 +1228,7 @@ " }\n", " coreai.graph @main(%arg0: tensor<1x1x28x28xf16> {coreai.name = \"x\"}) -> (tensor<1x10xf16> {coreai.name = \"dequantize_5\"}) attributes {__coreai_pure__} {\n", " %0 = coreai.constant dense<[1, 2352]> : tensor<2xui32>\n", - " %1 = coreai.constant dense<[[[[-2.319340e-01]], [[1.127320e-01]], [[2.019880e-03]], [[4.458620e-02]], [[-2.780760e-01]], [[1.681330e-03]], [[-7.000730e-02]], [[1.756590e-01]], [[-1.352690e-02]], [[8.386230e-02]], [[-1.951600e-02]], [[-9.704580e-02]]]]> : tensor<1x12x1x1xf16>\n", + " %1 = coreai.constant dense<[[[[-1.198730e-01]], [[5.944820e-02]], [[1.313480e-01]], [[-2.583010e-01]], [[-1.341550e-01]], [[-1.275630e-01]], [[-5.813600e-02]], [[-3.762210e-01]], [[4.141240e-02]], [[-1.055300e-01]], [[-3.027340e-01]], [[-2.644040e-01]]]]> : tensor<1x12x1x1xf16>\n", " %2 = coreai.constant dense<[1, 0]> : tensor<2xui32>\n", " %3 = coreai.constant dense : tensor\n", " %4 = coreai.constant dense<2> : tensor<2xui32>\n", @@ -1242,19 +1238,19 @@ " %8 = coreai.constant dense<0.000000e+00> : tensor\n", " %9 = coreai.constant dense<0> : tensor\n", " %10 = coreai.constant dense<0.000000e+00> : tensor<1x1xf16>\n", - " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", - " %12 = coreai.constant dense<[-1.964570e-03, 1.525120e-02, 1.785280e-02, 2.195360e-03, -7.064810e-03, 1.364140e-02, -4.711150e-03, -1.352690e-02, 5.867000e-03, -1.493690e-04]> : tensor<10xf16>\n", - " %13 = coreai.constant dense<3.353120e-03> : tensor<1x1x1x1xf16>\n", + " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", + " %12 = coreai.constant dense<[1.657100e-02, -5.157470e-03, 3.261570e-03, -1.451870e-02, -4.692080e-03, -8.186340e-03, 1.436610e-02, -2.389910e-03, 2.101140e-02, 6.839750e-03]> : tensor<10xf16>\n", + " %13 = coreai.constant dense<3.419880e-03> : tensor<1x1x1x1xf16>\n", " %14 = coreai.constant dense<0> : tensor<1x1x1x1xsi8>\n", - " %15 = coreai.constant dense<\"0x2920D0FB2FD22255AEEFBEFF313BF202142C0DD5BDD5DB1314F55A88353C29FDB74431C4ED33159A460D902752470C9F44C6C3B49E501FECEF9E9F27CF564CBD01C6EDFCFAB54BF1DEF2AF59AC4ABBDDC94E44AC1EC2C6F2D3118EBF811102F5543E520C383111053EDD80F8\"> : tensor<12x1x3x3xsi8>\n", - " %16 = coreai.constant dense<1.194000e-03> : tensor<1x1xf16>\n", + " %15 = coreai.constant dense<\"0xABC3B8BD3FFD3B3916CF2BEEFBB3DEF73DE5FD58D11907D6B7E1CE272FBE184F449BC0122A2B45D9E2DFEFCB3539F9F69DE1533527C7ECF7393268DCD591E1AC5120283DB053D2D61BD2202A07DC05F4D3E6287FE8FEC995EDB63B810138E1C12D41E143C1BF4DF7B5232AE6\"> : tensor<12x1x3x3xsi8>\n", + " %16 = coreai.constant dense<1.528740e-03> : tensor<1x1xf16>\n", " %17 = coreai.constant dense<0> : tensor<1x1xsi8>\n", - " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", - " %19 = coreai.constant dense<2.276610e-02> : tensor\n", + " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", + " %19 = coreai.constant dense<2.212520e-02> : tensor\n", " %20 = coreai.constant dense<0> : tensor\n", - " %21 = coreai.constant dense<1.881410e-02> : tensor\n", - " %22 = coreai.constant dense<2.760310e-02> : tensor\n", - " %23 = coreai.constant dense<1.040650e-01> : tensor\n", + " %21 = coreai.constant dense<1.768490e-02> : tensor\n", + " %22 = coreai.constant dense<7.104490e-02> : tensor\n", + " %23 = coreai.constant dense<1.507570e-01> : tensor\n", " %24 = coreai.constant dense<0.000000e+00> : tensor<1x1x1x1xf16>\n", " %25 = coreai.blockwise_shift_scale %15, %13, %14, %24 : (tensor<12x1x3x3xsi8>, tensor<1x1x1x1xf16>, tensor<1x1x1x1xsi8>, tensor<1x1x1x1xf16>) -> tensor<12x1x3x3xf16>\n", " %26 = coreai.blockwise_shift_scale %18, %16, %17, %10 : (tensor<10x2352xsi8>, tensor<1x1xf16>, tensor<1x1xsi8>, tensor<1x1xf16>) -> tensor<10x2352xf16>\n", @@ -1272,7 +1268,7 @@ " %38 = coreai.reshape %37, %0 : (tensor<1x12x14x14xf16>, tensor<2xui32>) -> tensor<1x2352xf16>\n", " %39 = coreai.quantize %38, %21, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", " %40 = coreai.dequantize %39, %21, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", - " %41 = coreai.invoke @model.4.norm_0734ac9a(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", + " %41 = coreai.invoke @model.4.norm_6e2877fa(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", " %42 = coreai.quantize %41, %22, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", " %43 = coreai.dequantize %42, %22, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", " %44 = coreai.transpose %26, %2 : (tensor<10x2352xf16>, tensor<2xui32>) -> tensor<2352x10xf16>\n", @@ -1287,8 +1283,8 @@ "{-#\n", " dialect_resources: {\n", " builtin: {\n", - " resource_13056670969290235296: \"0x10000000003C003C003C213C4F3C403C4E3C333C353C463C5B3C4D3C103C003C003CEE3BDF3B4A3C543C4C3C1B3C483C133C2A3C303C4F3C373CFF3B003C0E3C143C0D3C383C253C173C133C143C263C083C3A3C453C0A3C113C133C103C363C1D3C1C3CE93B153C173C033CCC3BB93B263C383C173C193C0A3CF73B733C3F3C193C073C4A3C743C573C153C583C3C3CE83B1C3CDA3B823C993C853C743C2A3C813C723C813C7E3C4A3C4F3C0B3C163C533CB23CAB3C5D3C713C223C813C6B3C5D3C8F3C803C543C0E3C023C253C703C773C603C4A3C413C463C3D3C263C373C233C523CEE3BFD3B2A3C403C7B3C773C3D3C2F3CFF3B0C3CEB3B1B3C203C533C133CE03B353C3A3C323C7A3C7F3C2C3CD13BB73BF73B013CF83B413C063C2E3C273C4E3C2B3C5A3C573CC33BE43BF43B073C1F3C123C123C003C0B3C2B3C233C093C113CD73BC63BB23B103C0F3C263C083C073C003CE93B023C633C403C2C3C233C393C2F3C193C063C2C3C1A3C223C003C003C233C333C723C3E3C6F3C693C463C3A3C333C1F3C493C003C593BB63B7E3B2A3C2D3C573C333C273C263C393C463C283CA73BCD3B8C3BD23B373C183C283C393C1E3C033C1B3C1E3C413C523C403CCB3BA43B1A3C293C183C0D3C0E3C213C0F3C073C0F3C1A3CF53B533CD63B013C4D3C173C0B3C1D3CE63B293C2C3C3D3CDB3BE63B053C443CDE3B153C1C3C0A3CC03BFA3BF23BF03B293C0F3C263CF73B393C6A3C213C1F3C2B3CF23B1B3C0D3C003C253C193C1A3C243C163C293C733CEF3BFA3B233C413C153C013C303C263C0D3CFF3B213CE73B173C3A3C013C7C3BF33B293C343C063C1F3C263C163CF43B1B3C283C203C233CE93BF53B3B3C0E3CD53B043C1D3C243C0E3C123C003CED3B223C2F3CF93BD23B213C193C193C273C293C0A3CE03B0E3C0D3C043C233C323CFE3BA63B2B3C073C193C1D3C083C173C153C0C3C273CFD3B203C303CE23BBA3B343C133C0C3CE33B0D3CDE3B003C123CD93B143C163C1D3CE23BA63B243C5A3C4A3C603C4D3C403C603C3B3C243C123C263C0E3CD73BED3BEE3BE13BD53B063C063CE63BF73B033CD03BCB3BCD3BC93BF93BE03BE73BF53BFC3BF23BEC3B073C053C023CE93BF53BD73BEE3BE23BE13BF13BEC3BDF3BFB3B153CE23B0C3C063C173C0D3CD03BE03BDF3BF63B043C0A3CF03B023CD63BDB3BEE3BEF3BF33B053CDF3BEB3BDA3BE73BF33BD13BD63BD93B073C153C163C2B3C223C573C3C3C033CFC3BFE3BFC3BEC3BE73BF93B1D3C2C3C023CF83B3C3C443C323CE13BD53BFA3BD93B003CAD3BD43B4E3C373C2D3C293C183CFE3B053CED3BD93BE13BFD3BE03B243C233C1E3C1F3CFE3B213C073C1E3C273C083CF33BE33BCC3B053C203C263C143C173C353C083C1E3C0B3C243CEA3BDF3BE03B143C073CD53B243C163C233C583C2E3C203C263C0E3C103CD93BE53BD43B023C2B3C1A3C0B3C1D3C1C3C073C183CF43BF93BEA3BDD3BED3BFD3B0C3C023C0F3CF53B2D3C343CF83BF03B113C093CE33BED3BDD3BFB3B1B3C203C463C193C1A3C083C093C003CF83BE43BEB3BDE3BF83BFB3BF33BEF3B113C023C133C1A3C113CEC3B083CF23BF93BF63BFB3BDA3BE43BD13BE03BCE3BFC3BF43BC43BF13BDE3BDE3BED3BE33BE93BE93BDD3BF03B0D3CD33B143C243C0D3CF03B073CFB3BD63BDE3BF13BCE3BE43B2E3C363C0A3C0C3CE83B1E3CEC3B323C123C3A3CDD3BE73BFD3B103C173C143CE93BF43BF63B033CDB3B003C213C4A3CE63BF33B263C503C163CFC3B113CED3B093C1D3C003CE63B033C293C413CEB3B363C3C3CE23B0E3C283C1E3C393C1B3C3A3C1A3C193C413C733C003C553C233CF43B0C3C343C2A3C223C2D3C1A3C123C223C563C303CF93B343C013C233C2C3C3E3C463C033C2B3C353C0F3C273C383C383CEC3B153CEA3B0B3C1F3C443C343C263CE43B2B3C183C123C313C473CEE3BE63BE63B0E3CFE3B313C3D3C023C093C113CF13BD53B243C523CC83BD33B1B3C013C103C1F3C303CF03B113C113C0F3C0A3C213C1D3CF43B413C123C153C013C223C083CFE3BFF3B0A3C0B3C1E3C313CEF3BD33B123CFB3B083CF03BCC3B1C3CE43B133CFD3B093C053CFB3BA73BF03BD83B153C003C063C193C243C343C263C1D3C183C183C103CB33BD03BEE3B013C223C113C343C273C1B3C243C213C073CE33BD13BC53B003C053C363C293C6F3C383C273C0A3C2F3C513C533C213CE03B003CF73BCE3B343C323C2E3C313C1E3CDD3B2E3C3F3C633C023CC43B0C3CF73B2E3C333CCB3BEA3BF43B0A3C233C2D3C3B3C203C2E3CF53BDE3BE23B263C093CFC3B113CF53BDC3B003C273C1E3C343C243C0C3C013CF83B163CB33BEF3B2C3CF03BF73B263C3E3C563C643C223C2B3CE33B473C183C083C513C513C393C2A3C3B3C6A3C4F3C493C493C2A3CFC3B3C3C043C573C703C5D3C603C4C3C2A3C2B3C503C4F3C643C3C3C0C3C1A3C073C2F3C413C2D3C2D3C433C173CE23BE63B223C593C1F3C1D3C313C133CF93B2E3C2B3C073C143C133CFD3B073C2D3C4D3C143C093C033C453C143C0B3C3B3C5E3C283C083C183C0F3C3B3C1A3C0F3C123CFD3B423CFB3B123CF63B533C223C063CE63BF53B183C0D3C073C003C193C383C113C1C3CFA3B053C113C113C153C2E3C143C253CD73B0B3CE43B433C283C4A3C133C023C1A3C133C373C223C413C223C0C3C003C003C073C463C2E3C523C363C5C3C593C123C4A3C323CFA3B083C003CCA3BC83BCF3BD13BD93BCB3BEB3BD13BF53BCF3BDA3BCC3BF33BE43BAD3BF63BE53BE13BE63BDC3BFC3B0D3C093CDD3BDE3BC13BE23BD83BE43BE83BE73BE33BC13BF63B033C9D3C713C173C333C183CC93BCD3BEA3BE33BA13BEB3BC03B323C843C8A3C743C833C4D3C1B3CD93BE53BE23BEC3BFF3B0B3C4A3C873C783C7A3C933C613C343C093CEB3BF33BC03BDB3BA63B1F3C753C503C4C3C513C8A3C823C573C3E3C963BED3BC63BB93BD13B3B3C5F3C823C7B3C6C3C6E3C443C5B3C583CDA3BC93BDF3BE13BFB3B1D3CA93CBB3CA13C963C213C523C3B3C3A3CF93BCC3BE93B033CC73B283C793CBB3C2D3C653C4E3C0E3C2F3C253CD83BDA3BCD3BE23BEC3B083C683C4E3C203C7C3C093C313C183CE73BE33BCC3BDE3BC93BE43B0C3C493C383C503C183C113C2B3CE13BD23BB83BDD3BCF3BF33BE33B2C3C343C393C0A3C183C113CE43BD53BC63BE53BE63BF53BE63BBF3BDF3B0C3C0E3CEA3BFF3BEF3BD63BFC3BC43BC23BD53BD63BF03BE43BDB3B043CF33BF83B113CF83BE43BDC3BDF3BEF3BEF3BFE3BFE3BFD3BFF3B1A3C2E3C223C1F3C223C0A3C2E3CF73B013CEA3BFF3B033C0D3CF93B1A3CFD3BF13BE63B133C0E3C653C183CFB3BCD3BFD3B1C3C183CDB3BE33BFA3B0E3CFC3B1B3C513C2C3C7C3C273CDA3B053C333CB93BAC3B0A3C053C213C0C3C213C433C743C8D3C673CE13B1D3C073CC53BF83B013C153C3D3C2D3C4A3C6B3C3F3C673C783CCF3B073C123C0D3C123C1F3C473C533C2C3C623C833C7F3C5F3C693CCA3B0F3C0E3C103C283C2E3C123C433C243C4E3C583C7B3C513C593CCF3B033C213C143C253C323C2A3C373C633C123C233C363C523C413CFE3BE73B073C043C243C5A3C6C3C263C0A3C193CEF3B1A3CDC3B2E3CCF3BE83B2D3CD03B0F3C2C3C333C0E3CFA3BE23B023C133CE83B2B3CE03BF73B273C0D3CD13B953BEE3B163C073C253C0A3CF03B083C0B3CE23B003CCF3B233C103C2E3C173C2A3C3E3C5D3C323CF43B023C033CE23BFB3B153C2A3C5C3C6D3C3A3C3B3C213C353C0C3C043CF53BFA3BD93BDD3BD33BE23BEF3BD73BEE3BEB3BED3BE43BD23BCE3BCC3BEB3BD93BED3BD13BDA3BE03BE03BEE3BE43BF73BDE3BE03BDB3BC73BCE3BF03BF53BEF3BD53BD83BEE3BEE3BDD3BCE3BE03BE03BD23BDE3BE23BD03BE03BE23BC13BE93BB93B013C1A3C2A3C203C203CCD3BE03BD03BE83BD43BE43BD53BEC3BF43BDB3B2B3C2E3C543C293C0A3CCF3BC73BE63BBE3BD13BC63BF43B0E3CE13BEA3B263C473C463C0C3CD83BF93BF43BD43BDC3BE43B073C293C493C333C0B3C593C393C153CF43BF73BCE3BAA3BE43BE73B273C493C8B3C9B3C0C3C593C1F3C143CFA3BBC3BD93BE93BF33BF13B113C503C7C3C823C753C303C253CE43BFB3BEF3BCE3BEB3BD13BDF3B153C553C4C3C4F3C453C283C043CFE3BC33BF63BD03BCE3BF43BF43B0B3C503C383C393C1B3C2F3C123CBC3BD93BEA3BE43BEE3BC63BBA3B173C383C493C523C643C173CF73BEB3BE73BCC3BC43BC83BD23BE23BF53B093C113C353C233CC23BDB3BDB3BDF3BDF3BF13BF43BBE3BD53BFE3BF33B0A3CEB3BD73BF93B003CE23BCF3BD73BE33BED3BCB3BEA3BEB3BC13BF43BEB3BD33BCC3BE73BDD3BEB3BE13BCC3BD83BE73BC83BD23BCF3BEF3BC83BE13BD43BE13BC33BD93BDE3BCE3BD53BD03BD13BEF3BDD3BF83BE43BF63BD23BDD3BD93BE93BD33BCF3BD33BEC3BF43BBB3BF03B0C3C0F3C0C3C143CE83BDE3BAD3BF13BD83BDB3BDE3BF43BC83BEC3B143C8B3CA03C893C523CFF3BC93BF43BE83BDC3BCD3BF33BF43BF73B0D3C6C3C863C723C123CD93BD23BE33BF03BCB3BD93BE03BAF3B043C283C293C2D3C413CF13B083C033CDA3BD03BE73BE03BD13B0C3C263C6B3C7C3C513C523C063C023C023CE93BB93BF93BEC3BDD3B253C323C753C843C9A3C873C2B3CDC3B043CF03BD13BD83BD73BCC3BD43B193C203C763CAC3C5C3CB43BDC3BF23BC63BED3BE93BD63BE33B063C243C4F3C3C3C5B3C2E3C023CFB3BE13BE53BB73BE73BDC3BCF3B113C073C403CB13C7A3C183C093CC43BE63BC93BB23BE43BCF3BF73B043C0A3C5F3C723C153CEF3BEB3BF63BFA3BD93BE83BD13BD33BEA3BD93BE53B013CE03B043CEF3BC33BC93BD63BA43BF43BDA3BBA3BEC3BE63BCF3BF03BEE3BDE3BEB3BD23BE03BE83BD23BD83BCA3BC93BDB3BE13BC83BCC3BCE3BD03BD33BED3BD03BF13BED3BD93BDD3BD83BDE3BEA3BD83BF63BD63BD23B053CE43BC23BE43BEF3BD53BCB3BEC3BDF3BE73BD63B1F3C0E3C0B3C383C313C123CD03BCC3BDD3BD73BE63BD93BFD3BC53B0E3C1D3C493C343C2F3C543C303CEF3BE13BD63BCA3BED3B053C343C503C133C243C123CFF3B143CFA3B1D3CE83BCE3BE93B033CFD3B263C183C163C0C3C073C213C333C193C063C183CD83BDB3BFA3B323C0B3C073C503C233C303C3A3C4C3C1E3C013C053CD33BD93BE03BD43B633C4E3C343C323C373C3D3C343C1F3C003CC63BDB3BE23B0A3C3F3C733C623C4A3C213C153C103C263C083CC43BE33BD23BDF3BEC3B243C643C673C2A3C1C3CE43B003CE53BF83BE53BF33BD93BEC3B043C1B3C4C3C393C353C133CF23BBF3BE33BDF3BEE3BF33BE03BD33BDE3B093CF63B143C053CED3B083CDE3B0E3CD93BEC3BF63BF43BC83BEC3BF13B073C023CF63B083CE83BFA3BC23BF33BF43BEA3BE23BF13BEF3BD23B253C203CEE3BE53BD93BDA3BD43BDB3BDA3BF43B003CF73BEA3BFB3BF63B033CE63B0B3C043CDB3BEA3BDC3BE13BEB3BF53BED3BFD3B033C933B0B3C163CAA3BEE3BB73B083C103CE53BEA3BFE3BFB3B023CCB3B123C093C133C213C083CD23BEA3BFF3B003CE63B033C083C0C3CC53B103C2E3C403C763C6A3C383C283C363C213CF23BF93BF93BDF3B2B3C263C373C3F3C733C673C663C7B3C643C1E3C033CE33B053CF23B3F3C453C413C353CAB3CB23CA73C853C3E3CCD3BF63BF03B093C2B3C6E3C683C603C763C643CB03C743C8A3C353C203CFE3BE93B113C543C5E3C443C5D3C633C3A3C6A3C613C3C3C383C113CEE3BE63B183C353C4A3C7D3C943C723C373C553C6D3C4F3C703C153C023CFB3BFD3B473C8E3CA53C853C933C6D3C413C493C553C593C053CF63BF63B053C313C3F3C503C503C603C7C3C283C853C883C513C0A3CEC3BED3BE23B3D3C503C533C463C5B3C933C4A3C453C2D3C113CEA3BF83BF73BFC3BF63BFF3B303C2C3C3F3C3A3C343C083C0A3CF83BE53BFE3BE73BBD3BCF3BBC3BCC3BDB3BDA3BD53BD73BEE3BBD3BD43BDE3BD63B303B353B5A3B803B573BA63BFE3B753B5F3B503B6A3B353B733BA33BEB3BDE3B2A3C563C313C623C283C3A3CEE3B243C3A3C3A3C053C4E3BEE3B003C093C0E3C2F3C483C173C403C0D3C103C103C443C253CED3B0D3C3D3C263C2F3C213C243C463C483C493C3A3C273C193C3F3C143CE53B283C303C0C3C193C213C373C323C3F3C183C0E3C373C483C3D3C423C133CED3B1A3C193C043C183C2C3C253C1F3C1C3C263C833C643C3E3C0D3C373C3C3C013C353C343C2F3C1B3C0E3C283C363C3E3C453C373C0C3C373C313C213C4F3C6A3C5B3C283C193C063C243C483C3A3C343C283C293C463C273C223C303C243C153C373CF03B153C4F3C4B3CF33B293C023C0C3C363C083C1E3CEE3BE23B023C0B3C243C333C323C063C113C2C3C2C3C273C2C3C173C123C0D3C1C3C0E3C283C093C1C3C313C2F3C123C173C183CDF3B063CF73B003C073C1E3C253C0F3CEE3B5B3C243C4E3CE93BED3B173C193CD73BC63BD43B123C293C0A3CA83B003CD53B443C5E3C653C443C573C4A3C2E3C463C3A3C253CF23B643B\",\n", - " resource_17846777755324596689: \"0x1000000011F40AF8E2CEDCC4DBA9C7E1D70EF10AE4D3F3F30D01EDE5E1E2E2F3FB02D6E208F9110DFEF2E8FBD7D6FCEAEE02FE080E13090B1013FCC8FAE2F3FF06F803101F3720141BAF08E5E010151A1707FF272B3525D2FFEBDB2A250E27DCD016142F3DF0E6FB0E29184304D3DC0B082D2FD3FD0C1323363A06C9E8FFF32836DF01F908351C3427DEF5F3F70610D6F4FCFD0D1C2E1106FBEBEBF5E4E1F0DDE30107071B06F2D7DA00EBF0F707F1F0EBEBEAD3CCBBD4C9C4E4F0F7CACBB6B6AEA4B3ADD8C9DFF5FE091501D5E5CBDFDFD3DBEDF8FCFFF6CFEF06EAE5FAF0E0DEE4DDFE0AD5ECE5F0EE040502FDF703D904F1E7FAF80708FC060A0818FB02F60EED03F3F10015141C1A0D1C13FC05D70A130F0BF1E1D8010323190B02F10AFF1705EADAE8F2FC14260BF0F7140D13EBD9D7DFFE0A0E0EFE090618FE0603E2DBEFF7021BEFF0F9FD08190C17F7F8FDF501FFD9EFEEE71013141A120D0AEAF1DEE5FDF5E104F8FD1110FFF4F5D7F3DDF203E1FDD9C8DBDBE0C0C9D9BFF2FAFD04FFFC0D03F5FD100EF602F308F9FDFE03EDF9E8ED03FC07050B0500F604F9020501F6F5F7FA02F50209F7EDF2EC02020600F9F9F0EDFE07FAF5F7F10907F3F3F1DCE608F0F8FBFCFE04F5F4DCE9D1E3E80B08F1E801FD0B06C3C5D2E2EEE6EE000AEA04110EE7D2DCF2EDD8E3EFF6000E040EFAD1D80509FA01F7FC06FC0616FEEDD70F271B050EEDF302FB12E9DFEAFA221C0F06FBE602F40B00E3EAE5F00100070D07FA0D0908F7F2F0CFD50705FB06080CF104FBF9FDEAFAF2DC00F81312FDF0FAF5F7FF05040401FC0C0D0406F30D081005F8F0FA09E6E0E6E6F5F20AFCF504E6F60D0EF500F8FDF4FCFCF1F2F1F7EDF4F71110080317FAE10C01F7F1EFF20CF90C1D13FD0EEB0C03EDE8EEFD0115091F171115BF11F7F20E060301FFEAFC0B132FE00BF7EA17020D0FEBD3E2FC2027F8F9ED08041D1F05D7EAF1030E2BF9F0D5FE190303EDF20807041400D50601FDF9080BF7F713090604F104FDEF0509091A0AFDFE0CFFECF2FA00F816F5F51E0F040605E0E9EAFEF0F30709041906E2D4C0D0DEFAF611010AF7F0E4D8ECF10105F4F7F30409E5F3C1D5CFD4DACBF6F9E5FFF1F9D9E8FDEE02F100EBFAFEF1F1F1D0E3E4F6EE051619FD13E5DE08F5E9F4EAFC09031C1A031522D4ECF0070D0E0F0A1B1B2619291FFEF2EFDB140E0C1508F50F30282305F8EBF017170403DADDF7192E1A35EEFEE81D130709D7EA08FF0B3817D4EF070D111CFFDDEFF413102A0CFBF8F60A1F1521DBDEE5FC0EF8FCF0FBF007071121F9F1E7E8E6DEE6FBE5C5FD0C181808F6D7DFF2D3E40CFEE6ECE3EEFA05EEE1D6C9F1EC02F2F3C8DDE6E2C6CBCCD5CDDFEB000A080900030C040DFF1101FF11F8FDF4FBFD04FDFAFF0105F5100C05FDF10F0CFFF81803FBE7F6DFF4FDF7FAF8030900F402E9E2D4E800EFF70B0A0AFD150CF5C6CBDCD00504F1FEFAEF002EF714FBEDE2DC00090AF213092B19363C22EFE4F40AF1040101FB0C193949061B0CFB0AF9100203F2E814283A091D11F81C0E0309EDEBE5171A0F19261A0516120CF0FEDFE5CEFD2E2A190D190C0FF5F1FFD7F2F4060DF6F3FE0BF0F60E04050F020DE6EAE4EEE6F6060F050C0CF0F0F9FEF7EB07F5F20BF50B0AF6EEEE04E2E1F3F60608F4F4F3FCFCEEF600040A0804E8FCEBF60AE70002FDF909050FE6F0E4D2FD06E5F5F606EEF50218E7D9D2F40F020B0B140AFFFAD9D7E7F2FCD7F502E1FB0007FAE5D9E2FE0518E50AF3E81B111E02D0CB0FFF1D11F40D08ED230C27F5C7E322002D27E7FDFD06110F1AF5EE0E0518211CF1040A121AECFD15010406FC11F9FD05F002090A00F7E709F1EC06FD0911EFECF6EFE6FDE8EAD9EDEDF2EE06EEFADFCBCCD6E8EAF1EDF20CF11104F0120C03FEF6EF0703FF080305F50907FDFBF40AFB0D10F70010F6FEFCF00F03F308160603F40910F4F80EF504031107FEF50A0C0F10FDFEF0F4F9050B0807F2F5FEF30A11F10A05FFFA12F4FCE3CDEE02F9F4F60AF8FF0402060504CDDFF8EDF8FE06FFFBFB101D1D06E9DAE200F40EF3ECE0DCE3223A1607F6F702F7F502F0DCD6DE0F1B28FEECEFEC04F00803ECE2F4070A08F8F2F104F3FD0FF8DDF0D7F505211F0F0D100C050709FFE2EFE3F30612FE02F201FD0309060D1015100B16020FF30701F5F501F6F90000121008F4070DFAF6FFFB0CF907FFF40FF3F2FB08F8FF0B0E090F070FFA0AFEFC09F309F40E02FD070C01F6F5FEF6FC0709F7FD03F90DF7FECCE7E1E40A0D05F101F4FF1A00EBD1E9E1F50706FBFD07040FFF1C05F7F4D5E50E0608F5F700FA032320150B03EC00110200EEE102FA262B2A0DF3F2F010FAF8F7F2F4F9272E2300F6EC000AF60005F0E6E0061702F6EDF9FB12010BFAE9E4CAD4FF07F9FE110B05FFF8EFE5F1D6DFFA1100FF00F9FD0408080C130EF5100202FC0DF1080AFD0F02FC0717090FFE1105F1F7F0FAFFF3030905F1FF0AFC02F201F4F30AF81204F4FB0CFE02F7F510F7F0F50C0EEEFB08EDF1F5FEEFF8FC03F2FEF7E0FFF5D7F5E5EFF60E0DF4F901E1F9F8F0EEE4E8F90A0BFE0CFDF0101AF806F8E8EC0F14FD1100F9FD0FFC2334EEFD0DFB1EF1F5F2ED021615341FE5F215171BF10F010F0B13262DDFE40A11110DF6F10DF9F7011B10F50414FA0712FCF2FBE2FC01F21E141FFB0D00F1FD03FD0BF4EA0901FD02F9F9FAFC010510F502F60201FA0303FBFFF501FCF1F20AEEE7F7DFE5EFFE09F0FE0503FEFF09FAF1EE00FAF403F2FFF8FA040EF504FEFEF302EFF60504F3F1EFF8E509F312F31308FDF60D0BF8FE0306FBF10DF700F6EEF9EC01FAFEFDE8FBF0F3DBDFDDD9FF04F7E8FC00F3E9B49CAEB9BBE0FE0C02010E0A00C2B2B399A1B1D5F40DF1F2F3E0D1AD9AD3E1DCD3CAF2F703F6F3C5B5B4FD1118E8D9CDF1F80CF9DBB2C5E416170D04FCEBEC09FEF8D5E3F2DB0716070BD7EFEF0DF304EAD0ECF10B1128F60CF4FD0CF1100FF0ECE6E50712F507F5FF07F50C0704F7F415F90A04F503FC12F903170EF70AE805FCF6FEF5FAFAF0FEF604D3EEF4DEF0EDE9E7EEE7F1EEF8F500F203FA08ED03F1F0F9F1DAE9E7FA020AF8FE171901D3D6F5FDE6E1FFFA0E1E150A040EDFC1F9E6FCF1EDF1021512221517FABBFEEFF6F1FAF7E2EAE2FB1D1208E8EDFA09FEF5FDC4D0E70000201BFDFFFE1C1413DECADFEA04F9080FE4F8FA030823F4D1F1F912FA110FD8EB081E001A1916F6F7F7F806FBF7E1EA1B150F0523090A04F9EFDC10E3D2D6EFFD1215F3DFC9E7E0D6FBFAB8DCCABCC0C8ABB9AEBEDFD80507EF02DFF6EDFB1A160200E8E8FFF3F4EDFD0918FC2823FF1201D9DD10000FEDF01E0C111C12101F03CC07E3F4EEEC00040A04F30811E2CE05EFF3E0DEE8EF0F10190BF7C5E3F1FAE3D5D7E6F124210DFADFB7DBF3FEF4EAF1D6E5142801F0FDD2CFE70FF5EAECD1EC241DE3E0E8D9C0FEE8C2DBE3EFFC18FAF4F8ECE4EE0FF4DCCEE4071501F8F410040C0CF5F0EA0F1512FCF2101B16FE14160BDE0E0F27010311071D19FCE90FFEF3E701ECE2EDF4F40809DEE2FE0D02D3DFD8DBD6DED8DCF2DEE20A02F70309F2E3FD10F4EFF9E2F1F90B050BF1F3FFF7F2FC1001ECC90A1915FBF0DEE7F00901F50D16E006FC07F1E9E0FF06FBEE03FCEBE90E11F4E0FDEAF014100FF6E9D4CF05F1FCF5DFFCFC08070CE9E0D4BE07070BE4F4F9FCFD03ECF4E0F1C9F1F701E7ECEEF41718F6E4E0DAE7100CE6D3EDEFF009FFE4EAECF1EBF90AF3E6FBF0F90406030AF807030512FD00120BF7F4EB0C091610F812150206110CF106030601F300E61518E4F7EBE8E0D9DBE1E40CF7F7F916120C08FAF702F71106FD09020EF5FA0A0DFCFF1A1708FA13FB0D13F60C0EF90A030A121718F701F4020FFDFC10F0E2F9F30D000706F8FA02FEF6FCE8E1DDF1F809F2FB04160DFB0DF5FD01ECFCFBE70704F7F614F60AFFFEF80FDDD4F1160A0FF70511F009FAF3FBEAE0F605F91205F8F8F4F8FDFF00D0E6F9FDF6F7F6FE04E5081206DCC6EE0417060EF5FAFAFF0E12FDE2E0FF201011FE1113021C081CE8EFC2E80F13060310FB130CFEFDF7DEE3E50808FE10011403090CF1FA0CFA0F101703111213FF00FA13F81210F616FDF80B14150EFDF412FB111116FD0F0FFCF615040512141AF9F90AFD06F5E5EAF50D00F6ECEBEF11F1F90F19FCF4151600ECE1E8FAEFEAF4FBEEF2DEFDFA00FBEFECE5FC00F802EFE3FDFFF108FDE7E1E312F5ED02EAE2051308FFFCECEAF60F05E7E3E1E6E80508FEE3FED70317F1D6D4D8FFF114F5F2D5E6E3EA0FE8E5EEFAF113030AD0E5EAEAF1EBDE020E1414050A070406FBF5F9F6ECFB1C1107F80407000AFAFEECE7F3F909F3070F16F415F5090AEDFBEB0AE6000E08F6090105F8F9F5F2ECF70A1407F7FBF5E6EBDFDA0306F0F4E7E9F2F9FF0FEBFAF2E418040019F2FAE905F40FF8ED00F9000D0C1A1516DDECF510F3F2EBED00F300010304DBFBFBF4EB06E8070507E9E502EFF1FEFAFAFEEA02081020FBE3F7E9ED01D2F8E1EFE4E11B0CFEE7F7E2D210F803E4FFEAEA1411EFF6E1F5F3FC00DED1F6EC05080DECF9EE02E2F708D3E2F9EFF71A14E0F9EBFBEC12D906F3FDFE04FF00FBF4F90A0610F80A0A01050A0E1A0E1C0EF1031D05C0FB01EDF9F605020BE7DE0502FCE6CEDFD5E6F9D5F4D2F0B203F601021200F9FE100310FD03FA110B010F03F81006061A1606FE09FD0318FA0CF8FB0F150F1E05FC13F5FF0E10F509F1FCEBF01821150C120A0A090B070E05E7D9EFFB1802F91304F90B0A06F0F3DBE6141600030AFBFCFD0C080714C6FD10FA130F06FD060F16101EF2F0121F0B0F0F03161005FF1700F90E1EF4EE0DF8041314040D1B01010CFAD5EBF7FB00FBFD05FF230705DDDCEE0406F707F80E080D211BFFEBFA0F18160F11170DFDFD090413FFF717160B0EFC1115FF09100B0DF9FCFB09080F0C1411FE1204FE040113F40BF4020C0101F8130DFC0F09060D0708EF0E0FFF0FF6F2F0EBF00C230403F6F50AF9F7F6E7E8E4E9E5F2E5DDE9F50BF9F5EAEB03EFE2D4CBEFF1020CF308EEF5FDEB10FDD8D6EF09F5000F08F7FADAE921F2DCCDF4F8E90C0F01F3F3E50102D7E6D2EBE7F9170D02E3E900FC04EDD9EC0B1514FE07F7081114EFF5E7F8F601FAF6F61110230D02FDF2DAE3EEF00D081609FC080B2109FCD7FE06FF0B070D0BF0EC03ECEFF7F8141419F90AF907F8F703FD0E0706FAF8FD010CF809F8F908FF0AF8140AFC020405141413FAFF030DFC1702030C021100FD0E0D12FE05081C09161406F90B080015010D08101222161500040403FD1215140E080C0C111C0B0018030905021112F6F80B071C1506F9FB0FF7020D1BF90CFF061E0800121517F6082121E7FB140E011218FC05FD090E1212EFF21A1010FB15F8FD0D16181220FE140C1C06FE061213FA080F15170024F5060B0C09FBFC040CFA021F24FEF50903000B15170609120513FE0D071402030B1317F61310FA1219FD0C05081006080A15F6FE120E0CFBFDFFF8FA11F7F9130A0FF716FD0A0CF80D10F8F60300060016121D1B12FD0C071213070AF60204061C282D1B1A0806F70605080E180E20151900FC0F1100080703F80204FEED16FEFC1601F616130E0D050E00E318070011F60A0F0A14031B1B09080E20FD1717F9FFF7080C09230D0325040C09FE150AF70E171B2E0F201806120C0A0D12F9030008092722F6F2FDF705061312FC02181F331FFC020A05FE0FFF0B0CFD1A16091F0B0D0CFB090FFE0016190B0E180207FDFB170DFBFEF7F709F906FD04F706FC1317F808F5F606F61306FD18FF08FE1102FD11FC0713110D0E090D18F6F4FE0B0D0312FA0DF1E50C11021415F80A01110402E3E3E3E4F1FAFF03F3FAF8170612FFF2DBF9F6F907F1F709F508FBFAFEE4F111020E0B1313FA0515000B1EEE0420FFFEFEFB0E03FF120F18ECE52017F2EDEFFBFD0213FAFEF8E0F616F2E9F5FD1005FB08FDFFF9FCF1DAE6F91015FA170DFFFF1B061AE6E5FA0D1D0C140511FC1008160C0F1A00130CF9FF0A130016F5FCE7ECFB06020505F9131308F5061204FA1608050BF4F5FCFE0A030EFDF70308FFFE07030CF30F0F0D01F7E5F1E3F00714FC100014F9FA10EAECD8AFB5DDEAE1EAF7060A0DFA0AF4EAF9E2DDE201FEFE070B0810F7F3F3CFC7E7F716F5FC0915FD09F1F9DDDFB4C9EBFF0EF8F70B0004F1FBB9C7ADE2FF080EF8F5FAF2F700D1A9B6E71E121802140DFC051904ECF7CAFF1F2518120D141E2C0D1CF6D9BDF621170610100CFCF6F6EAE3C3BAF108FDFF10140C13F7F30F0FFB180DF9FAFBF70511FAF701FA05FCFD0B14041506170C201B0A190E0CFA0516F8190E150CFCE1D3ECDFDFD7F8E7E3DAE6F509F0F404FFE703ECF8EF0307F1CEE4FA07EEE6E9E1D6DEEFF207F9C7E6FDFFE905EFF701F0ECF4E5D7DCFCE9F3EDE8EB070EF0E4E8D4DDD9E8F2F8E9F2E6131FF5EEDDDCCAD30301FCFFFCE50714FCEFE7D6D4C10BEED5E1F5DF0703EFD5F2EAD6DF05CDDFE4FC050DF7FAF5EAF2E9FFFC06F5E706080B0A08FBF405FF18F60D15101401EF06111004FCF807D9DE0C07EFF0ED08F507F3F6F72704E4C7CFDEC6E1D4E9D6F4E3DF11F607ECFCFBF6EBD6F9E6D3E4F1F50DF6DDF003F70AE5E7F6E4EED7E408D307FBD4F7030DFDFE0CF7C6E3ECF80AF2E2F1FC120B0BFF02CDC5F5F1FDFBDAEAF4EC01011709CBEFF0F3E3BCABD1D1EBF9171D0EE8010BDFB28DABBBD2EA020611FFFC3DEEE7DDCEC0C8E7FEEB0EEDD20230FE0113F6F90910FBF8EBE9CFF42FEFF814162721111A00F1ECE0E520E80C112016140DF7FA07EBE8FD110CE3221B06F8F3FBFDFDEEE201F510F9EAD6DBD3F2D7F0EDF3E4040A06FFDDCFCCCCD3CDEBD4D4DADFFB04D501F9F80209090FDCDBE3E600EEEDF2001D21060A0FF3FDF1D5F6F2F2FE10171A0A0C0406EFF4CCF6EC0FFF1B1A0C0F0BEC01EBF0BD0204FAFF0DF8FB08F20E07EDF8CEE9E9F7E6DBDDF5D4EEEF0504E9EF0FF2D4CAE8F1EAF601F1F6F3FD0A11E8FC10FD01090A00060205051F1CF71CFE090C1A1E1E04061D242E1B131B111C091D1E0D200C0C241C1307110C03070CF6FE1D2B161424F4F7F805FE12F5FDEFF6112008030903CDCED2DBD1F3E8E6F4F6F10EF5FBF0F105F906FBECF207F5FC0AF8F0FFF3F70F040E04E809080610EE0CFF11101A1E0408F8EA02F9F4F50AF20B081D0406E9EFE7F6FEF7F6FC10080300F3E4EBC2CDD2F6EA0CEC010A1215FBE1FBEFE8E5FFF5EEFD05EBF7F2EFEDE8F5F3EFFA080DFCFCEB0C282418040B0008201C0CF2FC2B2A1C201F1C142922330E08F411FD0C14101D2307252E201F07F50A0319020DF31A032714161405121211F901FDECF7FE0D2B14F5F2F303F0F8DCDFF7E405031803F80CFC02EBF8EBF5F4EAF4F90DFA06FDEE00F10AFAFF10FFF3F00A0906F7FF0D07F5F703FEEE09EBF2080103F5EAE909031B1611FB11EDEAF101F1E5E7EFF606081011031203CDF30BF30C1015121A1102FBF9E2E0F3EC121B0AFAFDFEF6EBFF12E8E2D3F20915E4F1DDEAE0F2040702F40FF01700D0D9D5E304F3FBEDF50F2FEEF6EFE7E8FD130C160EFDEB2243FB05FC13050F1605040A01FB26330908FE11040B15180E0117141525070100140317110BF8131A0E2B1AFC0DF7FFFEF6E801FF160308070DFFF70A0CEFDAE1D0EEE603DFE6F80C0501F2D8D6EDE5DCECFDF90D070FF00B071BF6F0E5F1E9D2F20FFEFEF80114261E160305CEC0E0F1F2FAF2FE061213101D110BECE303F2FA13F0F91506F512151115F1DEE302110BF2FEF1E10D181D1FFBDEEDEDEDDFCDC8D1E0F60D15160BEDDDFDCDB7B6BEC6D9D1101CF5D40722E214DDD3DBE2FB04FAFBE5C40717FE1DF7FCED0003FE02D3CFC716110E151915121412FCFFD2DBFA1A1D0C120E0F0E1CE4E4FDFC0C12FDFB060AFF100FF3F1F5F2161414FBFAE7F9E5DFE9ECF6DEF4E401FA16040CE7BED5D8EBE0DEF3DCDFEAFBFCFEFFF20411F2F6EDF302FA0E02FEF8F5060F0DFEEFD3DAF6E506F10D03F007090AEFF0D1BCD1CADBF6060AF8FE0C0EF6D9C9B7C9DEEBFBF00A0DFE12F0E2F6E0E8D4E0FAE8F6F70D011DF5080E130DFEFD17F70DF1040E33181616233C082E29FF0A00F6131825112B3D34292C211101F8FD07151630322A2203F104FC130AF0F5090F131C17DDEFE00EFE10F206F1F4F6FFF6EBE4E403F6080EFDEE00FAF5F7F6E5E1071AFE09FCEEF4F50C03EAE8E4DCFEEF0B08F3050BEEFCFDECF1F8F609F708F3F8F90DFEF808FA04FFF2E2E90D0DED02E6FC03150A14F7F0E3D6E9F505F5050E1001FCF8E9D1C2D1C8EDF1F40406050608F2D9CDF6F9C3DDFBE8FC0D00FBECD5EEF1050FF8EB02000BEDEFE7D8D7EF051CF40F2C01FDF4E5F20022110B1820102C44FEFF1819221326220E0C1321274611FD1014292A351B1B0100EDF72608060D161D1C281B1AE9D9F5FE2D01FB2A1E13070504EDE9F9F1131D070607F3EFE4EBDCC9DBEB0BEBFF03FDF6E4C4C8ECC4DCCDDB0E090A06090F09FD07080AEE09F702FFFDF7F70F10F4F002FBF9020EF4FDF9020D07F9F2EDFFEAF407EAF3EEF0FCFFF402F2F3E4DCDDE7E0ECF0090203EFFD01F6EC00DFE1EEEE0D08080402FE0B06080BF3F8F0FFF51405FA0F001B0821210DF3FFE4F509FCF20E111D2F251F0A0FFB0604FCFF030F170E2E2813F60003F7FAF3EE01ED08F40C0D02F4EE15F306F401FEF50201E5F1E0F2DFED040EEDF0FE0900F8F6D7EBE7F8F5EDEDEDFBFBEEFAEEF3010D0EFEFE07FF0D00F1F60D0101140BFA09F60309EF06FE07F0EF0408F3F90B10050EF6F200F2FFF20DF904F9F30DFEF9FB0AF602060B0AF6E6E7F5FCF3F801F405FCFFF102D8E2DCDBF1FFFC06F206F8EFEBFEE5D5DBFCF2ECF60004F5F9F90D05030DFEEAFDF30302FFF90508FC081E161C1BF605FBF206EFFC050024100D1A2D0B08F9F601EEF5F410F905EB221902090BF6F51000ED0700E6EDFA00EC01FDF5030308EEEDDED1E6D1D4E3030811FCF7F50AEFECDDDCCEDADA02FE11F0F8F80AECEEDEDD04EB09060AF70C0C01FE0705F10A0CF0FE070EFFF9FCF5F7FB1500110AF4FAF0F10DF208EEEEFEFEFE00FC0EF00EF2FFEFFD0C050EF300ECEDFB03FEF1000BFBF20BF400EEF9E6C1E1D3000C05F10A0AF90602F8FDEAEFEBE8FAEEF00DFDFC07F4FDFDEEEEF3F1E30AF50717F90A1313FE04F8FE120104FAFD1D28F6FAE70B081712121110FA0C0312FAF8F21D131A1B00FB0A02EEFA16001010FE0503FBF6FB11F10A001A0C16200B0EF8F8FC0B1308FD031012111A1201FD0CF40D0CF5F1060505161C05E8F3F9F4F8F5FBF2FDF3FEED01EAF301F9FE0DFF0403FC08E5E8F1F3F704F00907060708FA10F80FFBFEF9080900F7FCFC060016020F220603F4E8E8ECF6080E0FF909210F160908EEFDF50AF9F70D0507181304C8D4CCCFDE030A1314322A10110EEAEDCDDFF00CF6F6163B2C110EE6C9C1CDEBF6170B0F3250564C42210BC8D7042117011A3C4A231F1D241D061A192213FD050A221501FEFDF8213F592F0B070DE7F0FFEE031F36434F510F0CF4F4F3E0DCF0E50E2163614021FC0D04E7E6CDF6F604133E3020020D0C07FD030A0B0213FB1016FA0DF8FA0E0D0F0511F20E0D10F9F4EEF8FDEDF4EBF4EDFFFAFEE8EFEDF5FF00E70A121030112513F4F60008FD06F0FC162E201028150B0BCED4ECF3EA071F1E1E130A162305EBD9E0F413FF10130418F502FC00E8D6D3010316110CF303060A03E1E1D6E3EAD3D6DEFBEBE1C7EBDADDEE0C26E9D4CFE2D6D4DDDDE3F6F4012C1F051FEBE1F2130003EAF4FF171E2FEE2100FCFA062107171D1A1E111A080B12201816020F2421212104160D22040B1C0EF9FB00220513090ED3E8F4EF0106F2FEEC0604F210F010F0D4DEB9DFDDE6E9D0E8D7DD0CF4FBFEF4D7EADDEEEAD9D6EAE006EFF8FF23F903051705FEE2C2ABEEF7F2FD0CFFEEFEF50DF9EDE3C4E40E0710FBF3ECFCFB0E0A06F6D9DBFA0919ECD1CED2FD1C1F3013B7DEFB01ECBEAFA5B0FE020D07FCBCD5FAE5C9A8B5C8DC0DF5F1F3AEB9DC0A0BDEC2BDD5E401F4FBEAEFEAE4FA1107ECBAB9CBEAEE1800FFF1F406052BF1E5CEAFDFF3FE1218F5D41B242816E9CDBEEDFE051912E8DC0A0C0B120602FD06F11704F2DDF00B0303161C00FAE5F40EEAFAEEDFF908FD02223621FB01FE15E3C705F6F1EBE5FAF7EBE9DADDF3FAE6EFF91F1D09FE101E0F09F8F0D1D1F9FE0D292517051A03F4F9F7E5C308072016040D0F1D0DFB0AF0ECD6FE0807FE0903F012250D1C00F9C5F9F016DAE5F5E320221319F0E0CBF8E9E7CCE8EFF71E0C1A08FEE2C8F007FFF0D1F8F7FAF80D001303FB041A1AFFFAF8ECE4FD180B0AF9DF0A0C2215190DF502161A1311EDD5FB0D14030B1109141214FD05D3E7050E2A0C13141303FF1001FAD1DDF9EE1C2B31472F30261B0A00D7E2EFFBF706F4F2F0FEF4F805F8EF09ED0DFD0BFF05F5EFF6FEEC01FD0D0C0302160D070B0A09F2EDF30107F80617221805FEFD08EDF0EDFAEC04F80D0BF6FBFAF8ECE5DCDAE6E7FDF70FF4FE13FD2B2010FEF7EA08FEF2F8E912133228260F10FBFEF0020A0100191C241A16EEF007F80B04F8FFF7E8070811F3E0EE02010FF10819F406EEEBD8FC07E4F2E9E8F9F800041408020706F801F5FD030EF70208F50E16190207EFF8E2FAF70A080B11211B1A0423FA09F40201FDEC100F1422121E1200F00A0801F20802FEF7F8EDFFFA0BF700ECF5F7FEECEDE9FE01F804EFE604000404EA14211101FFF6F6FAE8F2B3EDF41B1B1B0007FC0CFBEEF4E0DDE3F82B261404FF0B1206FBF0F0D0D3F6132C11F3E1DD051520020AD2DFFC1E26EEEECEF21E271118E4DBED091DE6F5E4F409131C1D01F4E3D9EDF9F4E0DCE201020C140CF902CE00F30FE9F5D3F4DBFF1610FE05D4F40F0502E5E3E5F6062013F6F1F1EF331416F1E5F105130D02EFD9F3F2130F130E020700090BEBF2F306F7120D02120904141B00F4F0FDEEF2F90B0C080B03EBEFFAF7050A0106EDD6D1E40903EAFBE2F8F7F2FCF20A1C000F13011600E9E1DFEAEFFE212BFF0C080815FDFFF4D1F9F8EF0B11FF020E10F9191B07F4D5F8EF0DFCEECBEB0015F9101BE6E4FFD6F0E0C7C9D7F7FDFEECE7E7E7DED4E7C5C6CCEB0712FFE7C5D2ECF121F9E5C8F4011CEF000AF8F1E8FF2507F3D9E0FEF7EAF702021AEBEC153112F4D7DAECE71A041619EFF5082E051401D9ECF60F19FDFAD1051E231812FB01E6ECFBFEE5E3F2FB082917240E0001F3F9F2F8E4F508F5DE061C211008F101F7FBE7EC02F103FE0906FFEDF8F5F1F1F8FCF7EF07030B0A06F000F7F1F8F600F6040A06F406E5EBCCC9EBE8F3090BED04F2FAFB04CAC9CFDADEE106F5F1FF0E07FF00121F3A190C1202FD01EC071F363C331432332428FAF0F6F7F6163A4FFC0A092B271602FDF1F107FE04F4A6C1F4F2E9ECEFEF02F90FEEECCBD5E8D9E9FAE0F20C0BF4FFE4E1D4E3C0F10004F30DFB0807EDE4CFF1DBFE211F110DFCF4F4FDFBE3EEDAFD140703FE0000EFF2FAF604EFFBFA11FCFBFC03F204F4F90004F7050DE9F701FEFCF2F6F8040CEDF4ECECF203F1FBF304EC03081B0D0B18FFEFF6ECD6C005FA0F112408140E06FED8D2D8BAEB0DF2180D0F181000F1F7E2CCD7D2EE022C0AFB02E828262F2614C9E9090B06D30420223A270B16D0DDFD0D02E0E9F01222280BF5D3CDD4DB0C091EEAD9EF0FF6C8DEE5D9D6EBFD061304DCC4C2C2F101FDFCFCDEF7042EFFF7F7EBE009F9040EE4EA0A061C050A02F8FC0F231400F701F2060F06241F160721311A0300F6FB09FF1D2137301114241BFEFAF5F8EDFEEDFDFEF1FEF806F10208F0FEF2F70C00F3F9EC0DEEF9ECFA070CEE03F603EFEFF503EBED0C030AF2F4FB07EAF3EBE0EFEA0BF9010EF4F00708EAE603D0DCF0ECFBF10A0009F30AFC1C0E04D9E6E9F0100FF9FFF0011A343E24E4E0E3FB0FFFF2F3EF1316264927EADEEA130209090BF4FA00201FF9E7F2F9F70409F50000F900141A160308ECE503F6EEFCFDFF0614141B01F4E700F6F1F20D0AFAEA0A092BF9F3FBF30E02FB0C08050CEE0A1AF9EDEDFFF0FCF6F901FBE7EFE5E9E7F1FC09070CF7F701090C0604EC0002ECF1F4F6080200020AF4FBF5F8F6F1FCF700FD0B040CFFFA03F1F2FB09F8F3FBF0EF0CEBFA00F3E8F8EA02FDFFF2FEFAF4E7F5E3E5D9E0FE12ECFE0AF1030704F814F8F3C8D812F60AEF07F70D06FD080DFBE3E200F20102070BF5FD19231BE6D5D2F7EC12F0FF07FEFE1E122CF8E1D8E303F802FBFD0305052304F3EBFA050BEC0AFF05F2E8FEFE220908F6F1FDFAFA02F407F0FDF9FFF300E9020206FBF6FB0DEDEAF8D9E1F7F6F4EDF7FBFCFD03EB0102FB04F7F7EFF9EC020AFDF5F60505E4FAFAFB00F10D02F1F300F10CFCF80BF8F205F9EFEEFAEDF9ECEB0CFD05F7EE03FF050C0DFD0EFAF701E5F8F5E1DFFAF5FE02F5FFFB13050FEACBDFF1ECDDF504FD00081AFEF5F9070BFE0AF6EAEBF80B031C2316F2101217151EEAFBFEFB0A2A22FCED0118120A0BFE05010507F705E0E0F1F6F5E6DDF70305F701DBD8CCE5ECE2F107F1EDFFFEFFEBE4C4D4CBCFE808F70DFAF0EDF0FFDCCBCCB1DEFFFA1816F6EAF90AF8F4F2E0FDFB11021AF2F106FCFAFC0300FDF80701F907EDEFF00AEE040D061F0500F8FC0B050C0AF408FE02EDFD0AFB01EC0CFCF308F90E1217FD0E0D1012EDF4F002030405120621010F09FFEDF9E3FAFBFA1715100E3A2C0AFFDDDBEEECECF200FB1F303B240912D4BAE1F9EBFBF61335353E24181611DEE7FFFCF2FBFE201522301F0A192419FC04F70E0BF91A0D2A18241B0A16FDFDF91427123733253B3913E8DA04F7EC1227313C594F3B11F0D2C5EDEF01130F1B1D2118101AF0DAD9F6F20A0E21292537161E10FCF7FC0DF6EFFE081D2D281B150D0EFEEDEFF10D0BF50B03F9F0EF080303F6F5F4040903F9F3FFF3EC09F5F3FF16F903F8000F001C051EF2F1DFD7EFE8060A19090B1D0E190307E8E3C7E60C121225131B040DF700DDCAD3F2071C2B1D1704FF0B0C05E8D9D8DF01FF0AEBF4EF080819101BF5DAF7D2F5CDD6DCFC051D120EF0F4D3EE17F6C0C5E704091E1A0FE6E8DAFB2011F9F1ED0012FF05F609E5F0E107241D0EF8F5FD01FE1602FFDBF0191B342509F5E5F6190404FEEEDD0619FF0F0E1207FF0AF60AE9E7E8572724050B12160B0C07FBDEF4ECFE082026263B15091A1501E2C50811F1EAE3C7B3BBC6C4A4BBD2D90DEFF5F0CDD2DED3ECEA03FFFE14EC04FC03FD1C171A181A28130BF4F0EDF60D24212B21192C2501140D14EBF21B002A301EFB1B1C0800FCF9E8E1ED04322D43002B1C15FADBC8F2D4F11524333BF8212827F8D4CDF9F60E10272611EF2E1E2305E2C7FCEF02F81D0CFF011012FBF3E5C6E6F0D5D8E3EDF51A1108EDEDD6D3020ADCC8EBD603FC18F3FDEBE7D8FED8C1D6EBF9FD0D021D0A13F8F9FAEFCAE2F313F10004F5DFFCEDCA0802CCE7CDE2C3D0DBD0BDDED4F2020401D7ADAECEDCCBBBE4EDF8F9F202F0CFDBD6DADBDAF90EFAF30103F7F4F507DAD4E3E3F8FEFE1AFEF2FC0E04EBEBCDC8DBEEEB120FFEE6EDFB0301F4F1DCF903EFECEFFFD0FBF60A0E25E7EF11F9FFE7C7FCF8031C1F13230C0109201A0CF5FF040722230E0807160E2A270EEA01F8F3FC1B1108110E0F150DF5FA02EDF0F5F3DCD2F4FBF5EDF5F7D7EEF8CCD4DAD3E4EBF8E4F6FEFAD6F5F7D5E7F4F6F5FEF8FB0309F7EBFD02EBF0E4EEDDE0F0F6DCECFA0AF6F6FD0D0DFDF6EDF5EFF6F7F0FD060FF309F2EDF5ECF9F609EF03F5F8FEFFFF0705F1FC090BFE0A0B05FEFFFB12F70C04EFF20307FC1A01FDF9F2F5FDF6F6E3E2FD1A271303F10308E9E8F90FDEFB0A2018F8FDF7F2FD010B090CFC03F11F0904FB0BFC090C16060905FEFA05180C08FE0E04F610F9E908F0F401050506F5F8F5F6F8E40209F8D6090D15F2100509EFE1E6F8ECE7D5EC03FD03FB01F4E9120800F8E3EEECF80C0CFCF6EFF214FF0CF4FAF2EF0F0DFA05100709EEEAF1E5EBF6EDF2F0050503FE071200060402FBF3FD10FFF410FC02F4F0FFE2EFECEE02ED09FDFDF1F8F5F4DDF0DEFA00F500F5F1F2FF0305210D17F0F20608092C0A0FF0FB0E0E08FBE5EB0B0E13210FF804F5FE0300FAE10E021503EEF5F4DDE7FF1A2016F207150D0BD1E5F4E4FC15211B26F600140C00F8F101DA0819250C110F08101904F2DEF50706071A00EF1112F8FD05F9D80201ECFCE8D5DCF8F0DBDFE9D5F0F4F2ECEDE4E4F7E7F4E5F6FCE7E807E8D8EBDE01F0E9E5F3FBF70A0D07F1E2E7F603F50B191300EE010CFAF106E5F003F1EAECF0E90D020210E6CBDDD4BAD1DFD2D1D5C8D600E9F3EBC4DAC3E2EDF305121E08F4EC04F3F8F8FC0A0D182A172E06FCFCF50FF71315FCFF1C25162202F5F3F904082107F5F924090AF8F9F6E9F3041A211DF901240DFEDCBCDBE40417271324F6111E12F7C4DDD9DE0426180F0FFB190F0F07EEF4D9FDEE0512040D11250E06EAF6EDF1EFD2E6FBD2F909160503F8D5E5FAF5E7E5D5EEDEFE0D06F6F2DFD8EFFBC6D0DDE7F9EE0A202A25F1F2E202D8DEDE08EBF6F3110508FAE5FF02F3D4D7D9CECBC8E1D3D5E3E90AF8FD0106F6F108ED0FF4EE0F05F6050CF0F3FE050FFFFD0804FE0F0F030EF6111807063F261D1407070A01F1EFEFFF192A4C3D3C1B0812F9FB08F8F7EE1F1F361630301E0EFF090D0BF80F091825FD140119F7031011FA0FF1001BFAD0FB0822F609F3EDF9F2DAC5D6B2DCFB2121F8FA06FB08E2F0DACCC5DF010F10FBFCF2F6F8F61615EFDEEBEB0DF80106040E0312230D270BFAD8F6F8FD0A0EFA04080C0727FCF2EFFAF506F0FE0F030FF8120F13120415FA030F02EFF100F30907FC09EFEDF003FBF200FBF4E3CED9D8EDF8EA0B0902FD0401EBD8D2F0030E121813FAFA0E03060C01E6DEE20716222F0BF0F9FF09F3E5FAEFFE1A3C3332020BECFCFAF00F19FF0A2D272910FC05FCF30D2821160812110E1101EDF304101F2E1319E7FB0212FFF5F405FA0F191EF9D8F308F9FF0A02E20BF4FFFF07EBEA0200E6EAFA0EFDF5FBE5F7F2D7F2050CF100F204080AF7E8EBFC0CF9EAFCE8F8DDFBFBF609F9E0080A0D0A09F9FAF90B110E0500E4E4E9EAEEFCE8EDF305F60CF80AEFFDF400ECF907F5F5FE0BF50AF70BF6F405FFF6FAF00C06FC0BF8EFF2F30FF80D08150913FA020B07FEFD08FE070D1F2321000DFD01060A08F2160D2925361B0D04F0030EFF0110F20B040E0C1E1909FA100B0DF4FAECF0ECF3EF060A0E110FF102F9E4D9BDD7F9C9E4ED08F5F9F9F5EDE6D0BEDDCFD0C70209FD08F70D04EDE9EBF3D7E5F1ECFF04FB0B0BF9FB0E180D05070DFF00F3FDF5F5041924121922FD09FEF301F4FEF7020F151B0713FF07F0EEFA0003FDFCF307FBFA0CF70605F90B01F30DF4040409F50809F7F804F5F705EF03FC0EF8F5FD09F30CFC08FE00F7F3F20B070F0BFEF40EF2EFF900050CF3F3FD0B060D14110813100D0203F6FF0D3B3C312404FEF70F0BFDF702FE1B483F4802F5F7060602F50EFCE0F41D260BFAF6F7040E050302EAEDE5F506E3ECEA0B0DFC0E0CFFEDDDE7EEDCBFD4FE150C02FD0702F4EDFEF6E7E20102FF02040C00000D10FF0C04E8FF080610070B0CFE130F2B291D0016130000EF0E01F1170F19170B0FF509050DF9F40205F1FA01FF170610F70909FAF80006F9F8010AF10FF5F7F70B0C080302F4FF08FF02F9F00A08FD09FE0102F705FD0FFEF0FBFBF0FDFD0DF90CF2080C180F0C070700FCF11007020AFC1D22321715132309F2FA0107FD1F1FFF150C151F0F12FD05EFF501080B1C041307FB010BFDF307F4DEE4FD15D4F90E1107FE02F3F8FBEAEE070ECEE8202E0F0A0D040FF8EF1802F4EFFB0D1B1BFDF006F70FF5130F1313FE020E0CF2001101050D170E150C03FFF3FBF0EF0E07EF03FDEF150AEAFBFA02FAF5F4FCF60C12170E1102180EFD0B02050FF5FD09F6F2EC04EC04000800EF11F3EC04F3FDF9E808F7040CF9F0F406FCF9F0E9FEE904FB0E090CFAFAF9050FFED8D7DEDBF70706000407F3ECF3E2B6B4B6D9EFF31007F30BE5F4E4E8BF8EB9CDEBE4FE0909F40FFBFDE8DCB6BFC8F8EFFBFF03100911F3E412FFCBF90D0EEBF70C0601F3EADFFFFBD2FB22000B04F5060200EBF20B09E4FB1919080CF0FA07E9E6EAD2C4C2DBEE05010AF000F4100CEBC29CBBE9020DF9FA101006F200E5C9A4B2E610F2FE0B0101EDE8EDEBD700FFF5EC010DF60104FEF5FC0814010CF90AFCF0F6F2F0FDE6F4D5CBEAEEFAF6090A0FE8DFD1C8BCCCDCD8CEDCC8D5FAEDFCFEF6F8E9EBDDDADAF6040F0AF2E9F30C0BEDD8CCC9C3CBE51707FCFCEE0001E3CDD4CAC4C7DFFA080CE6F6EDFAF3FBD6D5ECE6F4F8E7F3D3EB0102020A04FF13F704F1D4C3D80519261332101F26181B0CE3D1F019192A1F1D111F1C1A0F10EBD900F7FCFDEEEEF60C07F3EEFAD0DE01F3E3E5E9E5F0F8EDF7F4D8DCDFEBD9D0DDEBE9EBE704FC1AFEE1F6F1D7DFF1F6F9EAFE0D0705F7E505FED6D7B8E3D9D1CED3D9CCD5DFED0FF5F6F2E3E3E8CDF3F5FBDEDEF5F1F3D6D5AAD6D3DC0A21EDE51BF40810D7F1FFF7F1E9FE0F0FF50D1DD5E3D50A1327F3D7E0EBFAFC0A0FD7D6D8FB291B06DBB3B8C3C01E3004D8F6232C2220D6AFA9A1810C1DF0E3050E0B110CEDACBFC6A5B8FDEFCED3CFE3F60BE4D1E0EEE0DEB403CCC7C4AECEE3DBE51500FF09D5F0E1DEDDD3C3CBDE05010A1016F5EED8D3DFDFD4D0E9F4060F1D22F1F9E906E7F2E8EAF908FE0F19030D000FF3E7F4F00FFC0104F6121E0E01F3EEC7D7E0FBFE05FAECF11C0BF5EDE7E4DDD0C5EAF4F6E3D3DAF8FBEACBD3EBEAF3F0080C0A0308FDFAC7E2DAFD02E704FF201E0B19F9F6AEDEFB040CF10F160C100B2E0EFBD6F300FBFCF5F9F9FE0133292FF4D30C01FF0519FCF0D8D5E52A17F3F3F7010F2113F9FDDEEFDEDF1608EE03EBF70104EEF7F1E5EEEFF3F6001107EFEBEC000500030701FBFCF811170606F5F3F7FDF7FE0110E4F801FF1307161AFD00021EF40FF5F7F0F8FD06FB0F0F0DF6F90EFFFD0ED5F908160D2A1016FE0C02020E041312120D0113FFF6F7FE010CFE1108020BFB0FF916F8F203FE00FA0EFAFFFB04F8F40A0F06F9FE15100DEAF30305FAFE1917160DFD0713EDF506EEF80E0722243D3316110DFBFD05E3F901F9FE2625330FFBF5F1FF02F9EB0DF50105F7190608141102E6F1F9EFFDFBF8F5090CF912F303EDF6EC0501EBD7F1F8F7FD080E24F8E9EF03EBECF200FFF6F9FD0B10172627150C0BFA000BFAF301010A0D1C1F14150F13EDFF020A0109021E200D0E05FC0BF90A0B06060F01F413FD12210704FD0C01F614130AF60D020415FEFE15F4F7F4F4FFFB1312F5F4ED00FCF7070C06F200EED6CBF9D8F50800EE00110609F8E7E9FF01EDEFFE00FF010F0AF6EEB6D9FF0005F3FA07091E092AFAB8C4E6EE02F2D8D9B9CDED1D3DF6B7E7EEFD18FFE8DCDCD4C71031F3D6EBEA02121504EBE0DBC2E7FFF503EF08FAEFE5E1F6E4EDE6F1F90A0BFC0E00F1DFEEFB01E8F3F3FDF918091013FCDDF5FEF605061AF9FC0D1101F604EF14FE0B0B1816F6FCF4FC120E0EFEF8190516FF17FCF2FFE5EE060F08FD09FC031E20EFFE10FAF4F91610EEFC0317FA02060A0AD6FADDEADBE400F2CEE800FBE6E4C5D6E7FED6FA0804F8F0EEE702C8DBEAFCF2F301F8FBF30EFBFEE8C4EB050D1101F5E4E1D1FCFDF1EBBCF814251809C8DCC8B9EB1CFEE8DC071721090CCBC6C3B3E41DFFE7F8130A040C02E7E2F3F0C3EAF9DBEADEF30A1BFCDC0915F1FBF0EBC9E7F6E2F3E2F1FA03051E17EAEFF2EEF6ECF2CED3EDFF1B1F09FDE8E3F2F7F9F8FBF0F308F91808FBE3EC09E8EC17020BF1F0F40714F8E6F7E2E4E501FB0FEFE5EAF7180F0AF8FBC7D2FC14FCFE0EDFF20002F00B02FA0A0301F40C04FE03F4F50FF80B1107F5FB0AF4FCFCF6FD100F01F60BFC0A0212F205162719FEFE0CEEF704FCF2DFDD132F3410070E100FF801E3DCE5ADCAD502FB171903F9F9DBC9DFD6BFA095BED1061DF90208E3E4DCE0E5D2B3C3C4050D0F0F14E0C0DCF8E9CFB6C2D804F50F191208D6FC0BF8D3D3D0F2FFF2FEF70C0DE0E9F603100D08EA0F0406000711F3E7FC0D051D0713FBFEFF0C0C0AE8E8E7FD0404F40607FF00F701FEF0E7F6F8FBFCF204F6FDF7FE0D0BF60103F40D16130B040E0B0209F7F5FDF20B0A18FF08FD040AF5EEEDE306E1FC0CFE04130DF3FFD8DFF0E801F9FC142C19271D01F1C8F1FCF5F7F8F5EB21282D3809F6E1000FFA06EEDAC7BCED225502FF081FF5F616F5E1B0A5A2CE2000FE10FCE2F9EAD8DEBDBC8FB9E806ECECFCD8D4DFDDC3DED9DDCDEB14071309EAC8D8E7F9F406F2FBEE080A07FCFEECF4F0FAFD0CF80FE8FE0C0AE6020F040317FCFB0913F6FF0009EF0116221306FAFA121B0E10F009EDEBE90B061A0D100F06F3F7FB100F0FF613F3F3F809F8FC011604FA0606091213140F0705F7FC140CF80A0F0D1413FF030D03F4F9F60F0FFB0AFD06190BFFFAF3FF0A0AF402F813FD0504211CF0EEEB03FF0109FD12F1FC2423351F05F5E6010BFFFEFCE7E0F92C3B310E0C000C01F403F1E3F5FB002624110E06F7FE0C0C03FBDD091527222415F9FA12030623101D201105070BF910F7FBFF110B2518270411F40404F5FC1004FB191609281B04120CF302F3F8F816140500170D06090F00100703F411080702E6F9040803FBFCFC0FF6F8F401130A15010B120D110DF604FE0BF6FCF908F900FF06F40FF805F9F40403F5080F0C030B03030E070FF9001A1906011507060E0E120E16FC0E0B350F0501FF080A1601FF16F911000A17FB0801FF1019F9110BFF0EEEFC0027102417050A0EF8F8F6FAF7EE0B1B2C2512F500140F01140FEF02133E2F1E0EFF0502120DFC1915101E1F0512090C13FE0AFB04080F0915211E00020A03FB080B0D0301210A1B02F3000BF6F4F51AFFFC0CEA000D0DF9F00907050D0415FCEBE7F402F40009050909F6090107F0091007FB110AF50A00F4100001010301F80FF4F5F60B03F407F606FAF8F8FB03FB0903FFF4FF090809050909142E1108F7FFFCF500F8F7F2F5F7062C382E0E0909F4F3F8D5F3EDF9E5FD240E1A07FC1506E0DFEB02F5DAD7D2F71C2E1106F5E6EDE51008D0BDB1D2EC19FA011000DD0B09FBD5C2D1D7E6070BFB11E9DEF2F8E5E4D7F0F601011009F9D9D4CBDEF7F4F7FC01FFFD040C05EAD5D1F1000B12F30809F805FAF9F1DDDEE3F7FE0215030109F8F900F9F1F5F9FE0403FE0B0BF6121212F6F800FE06020A1207F9080CFB0EFBF80602F30408F6FF05100CFCEAF0FBF1FDF51A0E0003F61210EDF5F1EAEAF414151022190BF212EEF3F3E9E6FA1A3247353B240C0BFCF3E5DBD3F7294649494B331AF504FEDED9E2FF3257615B430FFDF80EE6DBCDF1283A4A31362B1913FA0617F3EC0D122E23FF011306F6061E3A2F38302D1106EBDCF00F10F70A323E46452A1B18ECF1F2F4F502061339341E1B181606E7F400FBFF0102203220221D050BF1F8F0FA10120AF6211F332637100616F40FFD0FF9FC03090C11FB141301F4040DE8EDF1EEE7FBF2F1FFF7EFF91502D9F5E6D3D7C7FEF4EEE7FBF7FBF9E2DCCDEAF5E400F3F00E0F1609F6B9E9F801FBF2111E1926132C12EBB5ED05F1110E000F171B223124CFCBFDFDFF020009FFF8E60D3831CAED010A091A1A08E8ECD5D7FD08E5ED08201E1713FCE6DDEDC6C0CAD5DE09FF09FBFBE2E2F203FAD3CBF0FB1F02F6FCDCEEF60A15080EEDECFAF218120AFBFBF50403141CF0B5EBF107FF0200FB1007202DF4FEA3F8F9EE0922120CFC0DF8F4F903F1F2C8CBEC08211908FEF60FFCF9EF0B0923383431141E3120331A0206F404283A341E35FE12274D20C809F31C1B1C260B060A15182321F204EC0A20201912F4E1DFEB0D0BF6F9E6F61A0AFFFF03CAB5C7ECDCC6EDD8F619FE1307EFB5BFCDF6FCD7F3D50A25231812DDE0DFE11C23E1F6E820241B3B1B1FFC01FD0E16D0FAF2DF1F32333915011F0E0206FDFFFED20212322704100912FF04F3FEE3C5D40B2B310215140AF5E6F00EE2DFBDD4DD06E9ECDAF7E1D1FE0407E8D7D2DCE6D7DCEAF7BAC1F1010AE3FFD7DEF9DADAEFD5EDD10DF901032E1428112020302C1B01FAFD021801180B040814272F3E1C0701FBFF06F7EAEFF0F4130B141CF6E0F9FA02E5FC00F1E3EAFFF7FEF0E6DBF103F8FCF6F2DDD5EAE8D2E6F8DCF70BF1ED06F5F1ECFC0CF8F002CC0605F50C061604F8012017E901CE08051817FD1015FA060DEF01E5C5DE0713191A00FF19FBFDDDEDEBEEF2F50B1F22070C190EF5FEECF2E6E1DEFF0B1B1F251405F4E805FFD7D5D1ECE0E5FDE804E7BEB300FEE8F9DCEDF6E2DCDAE1F4C9D40AFBFDF2FBFFE9F305ED06FDFEFBFC00F1FE010A02030F16170A05F7FE0905FF13FDF5EE1313252C0710F5FEFFEBF0EEFCF8FB06FB11FA060EFCFDF3FCF3FC05F5FDFCEBFDECF3F5F6FFEA0A0016F7F4121605F5FBFE08F608F50C1222190A0D13FE06F8E6FEFEFB06FF1F07FD0EE8F9EB06EB020013E11F2D09040AE4F80606E6FBFCF4DD02132219FEFFE6FC0AFCE0DBDED0F5EEFD0C050FF70C0BF2ECD1D9E8D7F3050C12F3F8FC02FC09F0E7CACEFCF70F000209FBF5090C0C00FB0C1001F80209F1EB0000F1050006F90D07ED06F3FF000AFCF4FB230E1A190D081212FD08F709FE20290F10030F051F282E01EFFE03FF13050FF3FD1D2420150107020311EE050AFCEEFEFD03F0F7F8DEEA08FF1206F7ECEAF7FAE6D109D7DE16F70409F3F5EEEFF406EFF2D60121FB0D01040BF5F50723DC0DF1F0050A08031A0903181315F00AF7DE011120130B102A100514F7F5E8D6EAFD18210419151815FBE2F7E1F4ED100B230B0F010A07EE0503D9D7EA0201F8F6E2F0F8EEEFF4F8F1D8DDD2DFDCCFE3D4E0DB000C0C0000F7EBE8E7F7E7F6FA0D06050A082E17201D24052C2B231A00F7FB0C1D28211B0D07271E350DDF040B02FA0D1208FFFF001214020503F9E9EC12F3F6F3F7F2F0F3D6EF16ECEBEFFEF7F4ECDFDBD4D9F0D90FE7FAF2120E03E9D1C5DFDD08F400ECF108122003F7E0E1D2FE35080200BF08152C140613F50E183125EDF9CD0D292D1A14FDF71D09080DEBFEEFE012233F130EFA0003E9F8E6F6DFD308192621FA0E0CE2F3DEF6FDF5D4F7F8EF0FEAE8D3E7C7DF090604F3E4E9DFEAEBE1E5DAC4EA0711FCF2E9F6FFF2DFF4FCDEE0FC01F20CF40A0FFF11F60FEF0100EE0702EF00F60BF5190B040F0EF6F4F30100090C0D171A453C04021504EE0603FA0A1723414B1D260C1FFF050306F9FD1F2C40375327FD1305FEFFFB08F91B14132D36FCE3E1F7000C0202F30E14053800C6BFCAF80008ECFAFB0A02182A12D4E9F2FEF3EBF1FCFEEFFF110203FC1F1701F90806EEF8E5E2D8CF0D0E2AFF0B0F02EBFAFDD9D9D7E3110F1E04F5FAF9F6F8F5EAE5EBFCFA0702FEFDF707FBFBF6F1EBE0DDFAECFE0704040100EDFEFC09FCECFC0102F0F4060FFD130A1530171A24142B12E703F4151E0A0BFB0401221F41160BFB0414F8F6FCFBFD10111C07FD07FEF3F2F4F3ECEF0516F806E7DDE609F1F3EAFD0EED0115F8EEE1E4DBFEEF0601FE0A0611FA16F2E4ECD5F7FDE6FF16FF09031D04E5F604CDF4EECBFBFB0D12242E0C0C1A09F202F4D0EC131014FE0F1B081C11040502DDECF40DFEDE06121D180E0B0007DED5E8F4DEEEF108310E0AF10A02F1F5E4C4D4C5E5DD0DFFFCEE0903EE01E8E1DDEAD7DAFF09F70A02EC0105FDECF3F70608F1EB0B0CF0F504F90109F4F0F003F107FD0AFD05FC08FEF0ECF101F102F8E901F7020BF70B09FA0801E6E8EFEFFA05EFFB0DEEF00A0E021211F4EBEEF8F6FE05FAF905102E2C1814F903EF0CFBEFEAF7FB080D2B16FE100E02EBF1F2EFF10C1209261DFE00E6F6ECED0EDCD1DDE9030CF6FAE8FEEC01FDF6F7C5BCCADCE8DAF605F00DEFFEFFF4B5CCD3D7C5D2F4FBF60308F200FEECB7C4D4CCE806FDF4F1040A0B11FD0E03F80705FD03F0F8FB070607060417FF10EEFC0CEF0AF0ED09EBEEF201F50AF8FEEC05F2090B04EA04EC00F0EDEAFD0702F80BFAFBF7F5EDE6FC02E4F9F7FFF401EBECF4F1F70CFDF5F8E300060CEBF20809F21323181E0BF407F0FFFB0D0707EE0D222C271808FA00EE0B00EA050F12010A0C17FF07F60B020A0002FC07FE03F8FDFFF3ECFAF3FCF1F107D8E2C0CBFA08FB03FEFF0A05F9E3E3D6C1D3EBFDFF0101070DF2F2E1C5D6D2E9E6E3FFED0B01F506EFF9C8B5DCE0E7FF03EEFCF10DFA13FAF0E7080100F404F2F704F30AF502F803F6F10A02FFFEF00AF2FA070C030209F1050BEE0B08F8F9F004F404ECF6EFEB0CF600FFF0EF0801F40A0B0A131708F7F102F00DFBF9FF2E1F200814040BFCF0FCF7FF0609012015241626140D10F405F20609110D1E2114ECFD0CF5EC0907050D0F171B0FD2DBD3F1EDF9FA040F1BE9F904F0D4C4D4FAE506F6F4040FFA17050FD6ECF413FD0B09E912FE101C180E0717FCFFF605020AEFEBEDF2F00B190E1111F1F80100DFE5EEE6060E0C01F6F608EE060EEBF4FA131019FCF604E9F3F7FBF0ECEEE9D8E3F8E1FDE9F9FFF109F309FFF3FEEA040506F1F80CEC0A05F8030F0E11160108F7F0F80907F6F503E8F2070A0A20230FF4FEFAFBF1CACFE6D9E7FD050E17100203F2EED3E7E6DBE8050DF7E702FFEAF3DEE2C6E0E816231901FBF1F901F0F3D8E1E71C38312006E9F1FEE6EBD5DDC6C21A403117EB00EEF2F9EFCFD3AEF01F1815E7D7E70DFEEFE8D7B6A9DCF5180BECE3FD00ECE9DBC8B3D8EDFA04EEF4000109FAF3E9E0B5D0EE050A150CF9F909F9FF0CE9E4D3E91F1216F900F7ED0DF8FAF1F6F91516120203F60C08F3FBFBF20CFCFDFF090509050606FCF51511050508010F070B04DFF402051D262416191705152F1E07D2000E0CF504E6E7E4161328330F1603EADAEFE5EAE4E7F0FB10151C07F804F4ECE8DCD8E3EE02F5F200EDF4E0F3DDE3EAE8D2DFE4F4F6C6BCF2DBFBEC04E5F2E8EBF7FF1FFFDE02DC11F708F5EEFCF90D0D0AFED703CFFB090506FA0AFEF00A040AD9F4D2F0132B110605100C1B04ECDCF2CED30A0A1E31240D0FF6F8EAE5EED6BFEBF7040A04FEE9E9ECCFF203E9F0D4D8DAD9E2F7EED8B8CCD601EDF7F8E9E2DAD7DCDAE8F2D9FDF005F2E9D6F7EBE9DFF1ECF0F1020FF2F3D8E7CDC5ECC8B6EAC9E2F3020CEBDFF4DACAD6DED5D3CFBBE5F70CF209E9E9F9DCF1FAEA03CBB9160EF0F0DCF4F501070C0012DAB20217E9D5EBEAEC241E0912FEB8CF1111F8E0E8E8B8E80816180AE0DFEC0F10F009D7AFDA000F1506D9E00AF1140505DBF805F9011A09DCEB18FCF6D0E9E6191908F4DBE9D2EC0FE2DAEADEF823FAEBDBE2CBBFE6FCE303190D22081101E1E3C7B1EFFCDC122E381E243A2D04EDDDD7E20D0C1C10371227271F290508D7FDF9D8E4DFE3EEE8E6E4E8F9FCF2FA08F9D0E4D7E0D4E2D2EFDCDFFC0416FD1007FE0EF7E7DBE9D4E2E109211619201D0D080909FFFCEBE0011F2220041E1003091A0CF501E8F32124040D0DF8FE130F0FFEE5CDFD14181D03E7D7D0E60607FBEF0211FE07F9F8F1CDD2F515172B1CF60102F2F3EFE6EDF5ED05FBF8DFE2EE1100D5ECD1EC0503D3EBDBCEC106F6DBDCEBE8F4FCECF6C6DDD5D6FC12111C08F5F9EF08DFE2E1D4D3F50D0E242A2A0C1A0C0EFE0BD9CBF5F30703F81D18081A2106F609F303F8FB050C02F60D0FF403FE13FC0AF30AF607F0F4F1DDE2FA07F4F6FFFE0D0CF810080C0A04EEECF3F6FE0FFF05180A1E09151A021A0D0A00070612F5E8EDEFFCF60C221008010D10F0FBEAC8DDF4F9FEF8F5050F0F03FF0907EEEE18FB0A1017FC01040904091BFC1DFD0C091EFD09F3061502100F0205091BFB0AF2000C07FBFAF10C0902E7F2F4EC081211FEF6F71005FAEBE7EBFA05070FFB0A12240F0C0F02FFE2E50DFCF7F40F091002140209F7EB0F1700FB0FFC0D0FFEFD00F3F3FF0212030F11F60C071104F4070CF309FE0A0605040CEAE6D4D7DCD7D8E3D0E3F0F60B040AFDFF0C02EEE6F4D8F2D4E80F101F140B060CF7E90D08F0E8E4122809FF0E03E70016FBFBFFD3F51A2012EEFEF5D2F41511090CC9FF072700F1E7D7CEE803190E01FF0410210303F7D9BCEF05201A07EFD10B15EAEAEBE6D804080407E7E4E6F60BEAD6F2F70A08E9F3F5D6CDEA14F7D4E3FAF3F2FAF6E8D1CBC50710DB010E0BFDFEFBF3ECCCC4D509FAF6141C0D20211712ECFFEEED00FBFD152E1230200E17170513F809FD03EFF9DDEBFEFBF6E4EE060A1002EADFD8D5E2DCEAE4E1F3EAE9E911E4F8F905ECD8D7D1E7E6E5EEEE001A1A1C2105F2EDE0EAE1FCE5EC0C09050A1708F7010AFDE8D3E2032F1B0AFDF1E3FF361714FED1C4EC291208E9F0CCE00E1E080FEFCAEF0811E7D6DAD5D30817FF13EBE102EA03ECE5F9DEFBF3F7F907F1CEE3F304DDE3DFEEFEFDECE5EEDEFBEDD1E0EFEEF609FEFC00F1CED4F2F7D1F4FE020501121BFFD7E7D1D8FCFB1B18392110231C1AF9DADDF2F90C0208091A261411091400FD01F31108F2F6F5FE0407090B03051412F90703F1F405FD09F8F20A0208FDF5F5F50314FBFBFC0C08FD0CF9F4FCFBFAEBF4DEB9C9C7F9EFF4F4F9F7FAE2DFBEA4BBC6C90301040FF3120FF9D7BCC0E8E3FCFA0C0AFA08F50309DA1A46431A100B0415EF0C13040F125C643E17F60A0E1611F90D0D1430495D07F902202A2109F007121A202E210A1A020A1F0DF10612FB0D0B2A2B272405F312F4FF0211F602102E2823F104EEF8FD0708121405211817051A13F0FB0809F6FCFA06111D090F0A0D11F8031210F3FEF40DF6F501FEF70A0911F3020309EDECE4EAF2DFC3E2DBF70A010EFF0F1CF506F7F9E8E7EDF0E1F6141615F91C0BF00B0E190CFAE0072404F9EFDCDEDE12F5081AF1F114152CE6E7D6BBDC0820F4F5D2FC07120BF8FAE6E8EF20270C0D180E12130FF10828F6E2F4151704EEF0F8070EF0F921F503FFF8F918F406FBFBF7DAE3F7140B02E7E5D1E90012FCE4020F041106F4DAE2EFE0F413F901350F0F180702E1D7DDF9EDF3F715112E2305180C08F4E9F6FF140912F310FC0F1812150901F5FA04FB110C1409F80FF9F7F70D05F40C03F7F7F5F6FEF6020811FC060011F4080006FA141B0B0505FAF8FBF60E0105FEF6F7EE05071B1CFD0111FDF8FFECEDE6E804FD020302FD0A030D02F3100E0C02CAEB020EFCFAFF03F1FE10273A20DAEE0616FD0C12F5F4111A3B3A48E8E5EDFC0A01001300111E3034300902F7F7020BF612071A1E1210162718090604F411FEFE080320FD14230A080FFF020D07150E1519F7FFFE03080914010BF3F9E8ECF8F904F20D0601FBFCF9020004F5F8FFF5FCF8FDF3F3070FF51307FF0C0C0309FF100A030610FF090C10FDF40F02F9FBFAFC10FF13050314070015110D03F8FC05FD0B0904F5E8F2F6120F0DFD150A0BF10CEFEEEAF3F20513FF080B11FC000702F7111E05D5F2F5091713050FF1FF0A1E3B28E4EE04091301FF130B0D2A313D3A12E8080B0EF30FF50109221C4E650F00001101F40EFCFA10291B2B251E0615090BF50500F8170E2817250D14090C020200FDF9F4101D2216151DFF150FF81316FDFD12EC0AF5FE0F0D1000121206F7FB02F802F1FD070D00F8FAFBF2F5F314F909020CFFF31013FA10F611100B13F6030EF507F306FA09F6F50E0C05091304100909F9070D12F5F6FFDDE7CFF6F1E90AECFFFC0AF5E1D5D2F0DEF00A0401FBEF040DF3F8DBEEDFEE13121009F40B0909FEF702182E05190915FB00FFF90F030B4046F5D1F40A1A06F10805071E424A27D5DA0A1C10120205F3F713121E0DFA07090714FD030502021E21FFF80A17ECE505EAEAFF0CF8FCF60F0803F2F7EDE6E6F01110FC001C0812090CFFECF0FAEC02F7FC05041D1E19060E0104F304F90812F90B0603FAFCFF0E00FBF91203140EFAF5E2E6E3EBF3EAF20AFFF8FD0D150208050AFFFDFB02F2071114170E2919121A070801FB09FC0416020B0917242EFBF7FC08F2F4051A141D2F020100E7E1F8FFFE08F5140F2206EBD1D1CCED1C1807F5080D0A091DFEEED7F120220EFFF8110CF9FA02EAF5F1EC0B14E5E5010C01F7FCE9ECC2C9D1F5EDF8FB13090BFB0406D4C7B5C8DDE8F1F40EF8FD200FECCBB4A9CAC9DEE8F8F8F7FAF50BF1D5E7DBE703FA02F70B1504140AFCFD08FDEA0E1101140510F70CEAEADDF708F3F90B071006F4E2EAECD5D3FBFBFBDFEEE606F1F6E9EFFAFCE2DCDEE8E2F4D7DF0107E8241723111400FEE7E7E5CCCF0501230E240C0F090B05F9E4EEED2F1A0F1A1E14071B1F1CFBE2D0DA20111919EEE5E0001E0B15E7E200140E0CFCD9DDBFE2061B0A0CE8E4DEF6EFF0EDCEDDDB111F2405E5CE14F1F5E5CDCFF2F400EEE9D8CAF304DAE5C1CEDEFDF9EBD5E3CAD6FEB6E1E8E2DDF4FAF8E2DFC5D6CD04D207301308FAFA1B04F1EDBAE5FB0409021F190A20270B1409FADD010EF9F6ECEFE6C3E0E4E2F5D9DCF20CFFEDDFECEF10F90AE901F6EA1207ECE1E51EFD0402FBECFAED00F6F8E9EC0D2B0114F102020BF818EEEFDCF02B312317E8EA16171A1D0000E9FB11292E0502DAF70008201A0501F4EE1A142428F4E1EAFB1914F807CECDEE0E271CEABECAC5E2DEF006D9E91511280B0EDBD3E9FDE1EEF1FC1D2721241EFF05010200B005D0E934182C151300F40922F4D00ACCDB0607EC0BF2040F1B16E2F1F803E5C6E8E7E10507091300DBE5F4F6E5C5E4D4D7DDEFF0F9BDC5F6F4FB0202EEDDEBEBFFF7DFE500020505D3E8FC1A05F8FEFDF7010CF6FED2E50502FB081B080D0F0DFEF2EBE2F208060BF4F0030601071FF9FDE9FD13010C01F8F610181226F5FA020B1A220C160FF90410102BF7E2F0F8E80220191011FEFD07E9F1FDD8D3FDE80B1304FAFCE0E2ED06E4E2F403101F05EDFDF9EFF4F5FB02EFF3FCF803F2FEF5FDFC0209F7FBDAF2F80DFC04150FF9F5EDD800F0ECDE07F5190D17160F13F3D70302E1CBD2DEEB031C1D14EBD6D1FDF2F7FFF9ECFAE906FFF0FA0203ECF4F6F1E908E9E9F507FBF503F40A01F6FD020C0F1714F806FC06FC09F1EAFEF6010F191C0AFDF00502FC08FCFE0CF515FB08FF0507100DFEFDF60AFE18180D0A16160EF50AEC04F713FDEDD3F7FF232D13F400F3FFF2EFD1D2EFF0F831260CFBE6E9F6FCF509F808F804FF0A0003F402FCF30F031B20E0CEEBE90701FF010502111304FEF3FAF6F6F1FC0106FBEAEB07F30117161C0502F906FA02FFE3D3DDEC1C2B0C0BF0F403ECF8E9F6FDF5FAF2F8F603EBEBEDEEEAF9F60804EA02EAF2F106EBEC00F7FAFBEB01F3F0F8F0EBEB05F9FDFC00F1EEF8FCFE001D0FF8E9090A0CFBEDE314FC1A062003F90FFFFBEEFFE0FC0D221A0A141E1A071803FCFAFE172319161E05151A221D02FDEA030D1515181D221910142309EEFB1FF501002C152211FF150301F907F0E5EF1418190404F9E2F5F10AECE804F925360500EEFEEE01D8F8F4E0FC261A2A010DF4FC0901E4F1D3DC1E181414171505FB21F803FDEDF7F4050C1E101717090DF709F8F2EA02F60612262C130CEDE903FBE9E9EEE3D6E7EBE8F7FBFBF2F60306D9F2ECEDE4DCF1EAF1DDE10601F1F2FDF4F1EEF805FBF0F5F51708E4D3FAFB040912F90207F500F7F7F1F904070B080A0D19030F0A080100070B0803FE0318231C25100BE6FD0721150C32F100F90B1AFA05E0EA0E10232C2C15E1EAEA0518FD00E0D3ECF5081E01EFE7D7F90DECF8E4ED01F81227FA0500FE10F6DAFAD1FCFF082315FF1510231BF9D1F4EB081D0C1513160D0D2005DCE2E1E2F117FC0F1AFF0B050D03E3F403B5E6F804EAF400FF0EEE06E50610F0DBF4D3E2D6F1F4F0C2D802F1FAF90AF10200FD03EFFBF0FCEDFB00EEF0F0EFEDF2FDF909050AF102ECE9E90D0E00000E08F4FD01F0FDE9F3EFF703170F0F0506FCF90706EFF0F3EB11F705FE0A180C04F3F600FC06F4E5D6D3E817312912F7F9FBFE01D7CDB6ADE5301D160A1707F0FE04FBDAFBE3DD031AFEF4E80B01EB061D3045F9E3DBEDD5D6FBFF0101F502283203D6E1D1E8DF0DFAF4FDFE00041C08F30204F60AFCF4E9E9EBD4E2F3062A250FFCF9F003E8FEF4FDD7E1F305F6FA10F90C05EEEDEEFFFDE2E0EA01EB0107F3F009FAF3FBF7F1E8E6FBF9070C09EEEFFDF21214FF0709FFFB02F20DFB0EE6F403151C1B040A07FD0300EFF6FC00FC131A26131404030E060AEFE711171501F40F111D161F0BF9F7120602F8E8D8F931504C4108F608E9DFE0D8FDDF021F2E16FE100AF3E2F1F30C071FED09E0D9DEFFE706FAF82614360EDBF7E1DDF1D903F0F10305182815F30E0A00F3DAF5F9DE070E05182E142C120900EE00EEF2DBD3EC0D243B402BF30403FDF1ECEDD0ACC7E1F003FAF1FCFAF2050AF7E9F203FFFFE8F900EFEAF9E8FC01F7EEEDF6ECFBEBF1F4F0F2F0E8F809F005F706F0FE02F304F4EBF606FCEFFBEAE5F9F309F1F7ED01E9FBFDFB04E6E8BFE0E503F8F4FCF5FC03DDF7F6F4DCDFF3F9ECEEF4F6EAEAE8C6D1ECEBE2E4F1E4F2F5F4EFEFF1C0A2D3EEF5ECEFFC01FBFFF203F0D5B4CBDB0C08FDEB08E802EDFFF1EFD4DBDF1501F3F70AEEEBEAE4E2DADAD0E9EBFBF7E9F5F501F2EEC8E0D2DAF6F3F3FB0AEFFFEE08F2DDD9C4C8EEF2FDED08F1F4F704F0ECEDFA04E7E6F5F40AEC0203EFF9FF0507F30AF2FEFFF80208FA060A01ECF9E902EDFDE9FE080407F5E9FFF001030BF3F4FCEBFBFFEAF7F0F2FAE0EFEBEF0601EF080A04E901F1EDD6C4B4C8FFFFEAFEF0F7E7E7F9E7C7DFDBCFEDF704F1F3F8F5F3DAD2D0DAF9ECF5F1FA0502F2F2EAD0A8C4D6DCF2F106EBFCE9EEFFF0E5C9ABB0BB02FAECF3E9EF0808F8E9E6C7A9C8FAE9F405F7EEF707FEEBE5CECCF1FDF8ED0903F40101E8EBE5B6B0E5F302E605FD02FCF4EFE1CBC0D3F9F2E8EB05F5FD04EBFB00F7F4E8F600070100F0F7F9FEF40A0800090902F3FFF4FB04010AF0F9F001F6FAF1FBF008F60A0AFFF304EB02FEFEEBF8EBF5F906F6E9FEFCF3FAEEF5FEFA0BEBF302F3ECEF1316232B1907FCEA04ECFC0701F00C090618090706F0F8F309E9EAF2F301E2EB1A17211D040F01E9F7E3E3D2D1F0171F1C1F17EFF705FC01D1EEEC1A1B030606EEFFE900FA121A15131210E4CDE1F8FA06020917273B0FF6EAEDEFE70607F0F4EB062024080602FAF40D04010309E8EB07FC031A1E11130C0CEDEAF4F3F8DEE7040C150303F4EFE801EC0603E0F9F9FAEDF0F508F1ED00ED0AF0EAF009F1F001F602F0F7ED01FC05FA191C0811FB0CFA01FCEBF9F10405FF070913FFFC0C10EEF0F5EE030304FCFE0EFB030B16FCEE05FBF5EFFB0A130006201104F508FEF5F3F1EB0018150D08F3FC09EFECE3E2EF08ECF8131C17F2D8FAEA02FD0F1E0CE3EE19261F06F9F8F5EDF601F1EDC5E818301003F4F0F8EBF7E7ECBEBDE8FB01F9E3E9F103EEECE3D0E9F0FF09EEE7EFEF02F7F3D9DBCD0D0C231F01DBF30200F7EEE8F802F0EA0BF90AFDFAEDEFF903EB02F0EDEF0B02EE08FAEC06FC02FAF9F6E1E2FCEB00F204FEE7EBF4E2DFD0E3D5F4E8E6E6E8E7F8FEEDE4FB05180027081C01FE0CF601CBDD00050CFF0C230E11FD07F2E2FCFCFBFA1504ED04F70C0A0CFCD7F1011E1E151EF5EF03221E2118F206212E212728F40B1221282F09E9D2F500082321091C090303F5F6E5CEC6F5F01F1523FD04F2EED5D5FADAF4D604140C13FCF4F1E3E6BFE5E40207F4F9FB080406F9FAF1E4EFD6F80B0F150C1EFA0CFD0DFDE6DADECBEE02010F0500000EFDDAF001C0D8DADCEBEBE8ECEEDBAEC6F6FB0D0B02EFFFD3E5EAE1E6E3EE04FAEDE1FBC3C0D7D6CECDD7CAD8E6FAF2D9B6BCC8E0DBD0D0DEB1BEDCEFC5C3BCF1FEF1EFF5F6E9E9D6BAE5D8DE030202F3F41BF1FEF4C9B1FED71B2D230AFCEB0CFF110AD9AAE8E2412E240AD7F82C192F2BDACCD903191C25FDF2EC1D171009C8B601FA000F0ADFDBE1091B09EAB9CEE6E3F2FF02CBD0E1F8F608DBD9E4EFEAE2E1E6DCE4F4FA10FAEEFFE5FDE4E5DC0AE8000308FB031D07D90904051F120E150D1F1D182EF0E1F20F071722201F27261418190FFF0710F7F4E8E2DDF8D9EAEA0C03F10BFA02DDD8F3EAF2EAE5E1CDFC0801D1CDE2EDFB1AFBF7E2E4E7D204FCE5F4E8F216261A310AEBDFC4FBE5DAE403FFFA0F18FC0903DDCDF1DBE2030D170510170E1820FAE108D8070B1618FB050D051EFFFECBEDFD11FF051AFDFBF8FCF4DEE2C1FCF3E7F101030E00F9F0FAF0D4CBFBE6DFECE8F302EFF400DFF8D9F2FB06EDEBECE801E5ECFE01EFF600FDF8EAFDED01E903ECF303FD140BF6F00B18031A0DFB0506131E20E30100EE08F90E0BF7FBFAF50DF9F0FF03F0F20D0AECED06F7F40604EE03090205F3F1F1F5D9EDEFF2F8080404F3EFF50408010CF808E2FDEA090BF2F7040413122919F8EFF103F6EBE40F0605281CF3E3E3CDEC0101FCFC0DF80C19110E0A0AECF7020806FCE6F2FEF41D18E9F1E3DCF50BFB08EFD9BDFE1AEDDEE1F2E5F104F5EFF3DAE0051C0BF6CFE2F9090AEBF3FFF9D604250DEAF4F509FA0A0DF005070B031D16FDFCFBF804070EFAF30B080F1614EFFDFA01ECF80800FF111A0D11FDE2F8E6F40A0E000CFB08FEFEEA07FEFAF804F60CF00007FE0FFBF3F3FFF3F4FCF3F9F6F60EF7F0ECF3F6CDCFC7D200F80EF6DDD4D2E3F20604FEFED3C5EA01EADAEDF6F31213210902FCCDD709DBDA021D1E17271AFC03E2D9B1EBE1150E1313160B08140B03E0D4FCED190D0E1FFE0E10121BF8E1EAF9080EF8050C0F04030EFFDDBDE00AF802030003060A0C02F2E6BBE200F2FF040701E7030ADFE8E8F30807DEE7EBF6E6F1FDF7E4EAEFFB0008F2EDE501F801FEF2FBF903050D04F8EE02F30E01060B10211209020101191909121021112E1EF106F90909E7EEE2E3E6DED8EDFEFCE5F3E9F8F0EBF3F7DBE0D5DBE6E5E6E8FAE3BFEEFB08E4D6DCD2DAD4D7FEE0D6D9E7EDEDF60305F700D9E2FDEFEC09F209F5040BF4F504FDDCFECEDF17051C15FDE7F7150C0AE6D6D3FB22210C21FD04FC232E00E9F2F8F1060F140AF4000B0709F2D5C7E9EC101B09F4EA131914E2F3C8D5FBD3F8FCE6E3F10DF8F5E1FBEAE4EAE9E3F8F2D7DFEC02F7F303F7EFD4DAF3EDFDE5F70EFF06101403FCECE71510030F0D152B253320FE010EF82C0F0E14211E1B321F0BF00EFCF30604ECEFF10DF10EF006F90808EEF006F5F7E6FDF3F0FB0902F9FDEFFEEE0EEEEEE5E906E7EFFDFC0507F10C022824EDF6D2E3EDF0FD08EB1819324421061CE2D2EDFC03FCF10C1434150E03F2DCDAEDEF07FB04F1F5D6E8F6E8DEEF07150CF90DFDE7DDCBB4DB06EA0EFC17F20CF8ECFBE0BABE2A102506FCFCEF010DF7F5F9DEE11646160814F3F007ECFDEC18FC1A2F14F20812FDFC030A09FF12002BF9EADBE8EEFFF30BEFFE0B0D0009FDFEF906F30A03F907F3FD13110C09231C04FA06010A040AF8EFFF02F9EFE3F40501F707FB0A01E8EFE4FCD2E6E0D6F2FEF300F3F3FB1117161814FFDBD2DD0DFEE702FD0314271AF1BCB7AAB1EEF6EE16020C263D18F3E5D1B7C304ECFD111712232D1F03FB02E2DBF9E21A0305F5EC3015F703F9D9E404F0FCEEF5D4D92334060CF9CCF6F700E7EAE8BCD3161D1E01E6F1E0F0FEDA03D6D6DF0A231F19EB04EDEEEFEAF9F502040D0703F7E0FAEC080B01F1FAFC1006FEF30DF3FFF8EEF618151A100F2A0600FDECE90700F401F3110F0B061004F50EFBF0EFF208F10202FBF305F9020AF90A05FA02FAECEF090C0C0B0209FFEF090A0C080AFBEFF9F905070505FE0A07F4FC08F7E7E4EBE7E8FCFFF2F30709FBF90B0BFBE5E3E4051304FAF305EDF9EAE6F0EEFDF3E8FD0507F70BFEE2E0C5D5FCEBE5F10EFBFCFDED04F8CAE0F4CEECF4F801F800FD08EEFDE8EFEDF0E0EC09FB030A0AF2FE080B0F030415F5070C0F0C0EFE0AFA1B07142404F00D0B07FF0700F008FD050E08FFF70B000BEFEFF3FD0A07EFF8FFF3FEEBF20101FF0AF3F1FAEEF903F7F5FC080C0BEFEE08F90808FF08FB0400F4F106F60BFBF3F2FC06FA0A0707F2F9F802FEEF02FCEBF811040DFBFBFD01FF0CF8EEF0E1C4A7C7F2F7FCEDEC02FB0BFE05E7BEB2C7E80AFBFAFD0DFC0004F9D5E4E8D4DCFCFD0FFFF70BF7DFEEC0CCD5DEF5F6F201F7ED0504E2DBD4D1BCE3FAF801F4FEF1F101EBF5DFECE9FAFC03FF0CF0EF07F2F4FAF81D0003070601F709F7EDFA18100422270C000FECFDF9F8021001F91A1017F506F6EBF708F4040C05F0E6F4EFE805040602F0F102F205F1FC01F7EAEA050905EFF402F8FF0600F9F209FE0803F2F20809FAF60E0A02FEFCF107F60B0B05F0F2F107EFF2E9E5FCF7F4F5050708000B04FE03EAE7DAD5DBFD09F8FBF50A2534341C16ECEFE8DCE5FDF4040A1A1E1A00F401E3F9F5EB0CF90C18100103E7DCFCF40E0EF80C0D06F3DFEA1C0BF3FD0511F50BFDF3E5EBCAD033001A1615EFEB07030601F2DEF0191912FE13EEECEFF60309FEF202191904F713FFFBF503FA03F00209F3FCFCE6EAFAFBECF002FFFDFFFFF7E5E5F206120DFAFAFF03FD170E050407000815F3EFEEF5FD09F105EBF20000F0FB04070CF2F605EFF005FEE8E7E7F002F802F1F3EC061E2D201901F0F1E602F1F8EFF9001B202C1C0D1301F7FDEFFB05EF0615201618FBF9F6F4F0FD04EFE9F414232C272BF1F9F5F3EB0EF1CFCDD72E1408E3B3DAE5F701E7CED2D32037F5C9B7C5D0F00503F5F3D2143F3507C493CED0F0070506FE0B011C22FEC9B5DCFDFA00080308061B2C2807EAB9E1FE0A05070312091D1705FEE1F8F4FA0505EF0101FEFEF4DED5E4DDDFF300F7F2FE02FB08F6FBF6F7F8090C03F805EAF1EFF8E503F2E90AF7FCF208E8E1FA02F8F6F4E6F8E1D7F2FDF003FEE9D6D1EDF1F3F0D7E6E8E9E7D7C6DCE5ED00311E190F07EFD7E9EBD3DEE8ECFE2E1A250209DFC9C9C7EEEAF5F700FDEE120703E9B6ABC3FB16050D0D0812160A06EFE6C6D80B14091E0A1728030B0CFED8C9C9040721210E020D0EFFE9D4AFCBD9D6F414180AFD090607F8EAAFE1E2E1DDF8E6D8F6DEF4FAEBDCE0EBB0EDF1F1F5F8EAF5E3EFF9081FEAC1D906F0F1ECE807F905262115F70DF52B261C1D14241B19221BFA12\"\n", + " resource_16376598689397904362: \"0x10000000F83B033CE73B003C1F3C3E3C193C2E3C073C293C0E3C253CE43BEE3BF33B043C183CEF3B183C1B3CE03B193C043C153CF33B173CE73BF13BF13B073CFD3BB93B0D3C013CF23BED3BD23B0D3C103C193C0B3C033C083CF93B2A3CEC3BD33B283C343C5C3C583C4D3C873C6C3C5B3C0D3CFB3B103C493C0C3C143CF33B4F3C493C373C333C8A3C753C6B3CFD3BFE3B203C193C073C1B3C613C813C8F3C823C4D3C303C0F3C1A3C163C033C193C163C473C763C453C923C953C873C4E3C523C503C5D3C1F3CEF3B283C193C333C633C503C583C563C673C723C693C493C403C213CF53B153C5F3C523C513C263C333C3F3C503C1C3C893C583C483C133CF23B203C203C513C663C453C293C713C373C4C3C5C3C5B3C2D3C043CEE3B0F3C1A3C773C7C3C613C213C493C613C6F3C6E3C7B3C373CFB3B033C0A3C523C523C6C3C883C6C3C793C7C3C803C0B3C2A3CFC3BF43BFE3B093C233C453C613C593C803C793C5C3C353C143C163CEA3BEB3BDA3BF03BDF3BE43BE53BE53BF63BDD3BD23BEA3BFE3BDE3BCB3BEC3BDF3BF73BEB3BE23BF33BE53BF13BEA3BDC3B073CF53BFC3BEC3B033CFD3BEC3BD53BE93BDE3BFF3BFE3BDB3B073CF93BD93BEB3BF53BE63B063CDD3BF93BE33B013CFF3BE93BD53BF53BFD3BFE3BF43B023CE93BD53BF73BF83B023CF63B083C003C323C133C233C0B3CE03BF53B003C053CE53BEA3B0B3CE23B203C113C7F3C643C5B3C243CFF3BF63BF73BF13BFE3BEA3BEC3B423C7B3C6A3C4A3C8D3C843C253C163CF23BE93BE43BEA3B003C243C5F3C863C5C3C953CA13C6C3C433C293C053CF73B003CEC3BD33B533C733C983C613C803C4F3C4B3C133C0E3CEF3B003C043CEA3BF13B4B3C893CAB3C703C453C1F3C223C003CE33BF03B023CFD3BEC3BFD3B3C3C703CBB3C673C4B3C403C023C113CF73BE03BE73BF53BE83B023C153C2F3C623C433C593C283C173C013CF83B043CEA3BFB3BCF3BDB3B0C3C0F3C143C083C393CEC3BEB3B033CED3BF63BCF3BE53BE63BEE3BE33B063C0A3C1F3C153CF93BDD3B033CEF3BF43BED3BD33BF53B043C043CF13BDA3B063CF13BF53BF93BE43B023CE93BC53BD13BF03B023C013CE13BE23BE23B013C003CED3BAF3BF93BEE3B063C013CD93BE63BFF3BFB3BD63BD83BE23BCB3BEE3BE53BEB3BE03B003CED3BF73BDB3B003C013CE73BEE3BF53B013C173CE63BEC3BEF3BE83BE13B023CF63BE73B033C103C093C3D3C613C4C3C6B3C0F3C013CF43BE53BF33BF63B053C333C593C463C293C4C3C8F3C5E3C133C033C003CCF3BB83B0A3C273C823C853C6E3C303C3C3C343C2B3C183C123C043CEA3BF33BFF3B293C693CA13C6E3C473C303C3A3C263C153CDE3BE03BDD3B053C133C303C923C8F3C753C1F3C2B3C2A3CD53BEE3B053CBC3BC33BD23BEE3B393C6E3C2A3C5B3C433C0C3C253C313C283CFD3BCF3BF93B023C243CFB3B213C443C493C273CEB3B2E3C163C0D3CE43BD73B033C013C093C133C413C283C153CF63B083C003CF43BE83BD73BFF3BDC3B033CFB3B033C0A3CFD3BD23B133CCB3BF93BEE3BF33B0D3CE63BE53BE13BF83BE73B083CF63BF33B073CF63BEB3BFC3BDF3BFA3BEB3BEB3BD93BE83B013C073CFC3BC33BE13BEF3BEB3BEC3BEC3BD83B013C003C003C113C413C453C523C283C423C2A3C2E3C2F3C193C003CE23BEC3B193C2A3C6A3C843C8D3CAC3C9B3C4F3CF13B2C3C4D3C303C0C3C113C0C3CEA3B453C323C3E3C3B3C423C393C543C0C3C213C063CD53B1F3C5C3C603C3F3C603C463C593C713C873C933C3F3C163C643C3E3C473C713C2B3C603C5D3C4C3C663C703C643C713C333C0F3C163C3F3C463C2D3C553C273C173C7D3C823C443C4A3C653C1F3C0E3C3F3C413C623C533CFA3B443C4C3C743C423C483C4F3C233C143C243C273C3E3C3A3C393C423C463C283C4E3C9B3C573C6C3C3E3C2E3C2F3C3C3C503C5F3C513C0F3C193C353C4B3C583C2C3C2B3C533C033C0A3C3B3C5D3CEA3B503C563C423C263C733C523C103C243C1C3C2A3CFB3B1D3C523C2A3C2B3C403C0A3C273C3C3C4B3C2C3C373C443C343C3F3C213C2D3C183C0E3C223C383C3A3C3E3C273C143C023C433C303C123C533C1A3CEB3B5E3C7B3C323C063C2A3C0B3CDB3BE83B053C1D3C083C443CDB3B003C403C4D3C5F3C863C1B3C403C373C453C0C3C593C253C323C0E3CDD3BE73BDB3BE73BE93BD93B073CF13BFA3BDC3BF83BE23BF53BE33B113C173C193C333C463C2B3C2A3C333C603CB23C483C343C233CFF3B043C003CC43B183C073C183C343C4F3C383C443C273C903C0D3CC83B1E3C4C3C2E3C413CF53B4E3C753C5A3C493C243C113C473C9C3C023C283C193CFF3BC13BFF3B493C6F3C193C6E3C473C393C573C573C033C273C333C153C0A3C1C3C2F3C983C453C213C0C3C3E3C453C6D3CEA3B123C273CFF3B0B3C1A3C203C773C383C093C023C1B3C203C273C053C1E3C443C363C0D3C253C3C3C5C3C2E3C443C3B3C2D3C193C553C0A3C273C293C0F3C113C0E3C4A3C203C5B3C403C2F3C353C203C7D3C0B3C163C373C103C083C243C003C2A3C0A3C343C113C1C3C313C203C043C143C3A3C013C1D3C033C123C033C0E3C1E3C0E3C033CF13B2F3CF73B313C243C2F3C053C093C403C303C083CF83B263C063CFD3B3E3CE53BF63B383C153CE43B193C2C3C043C023CED3BFD3B083C3B3C1F3C003CF53B583C363C3B3C6C3C2E3C203C1F3C2D3C1B3C173C2E3C2E3CF13B003C003C293C463C743C5A3C643C4C3C443C453C663C5E3C3D3C183C103C2B3C183C4B3C3E3C573C273C0A3C233C413C183C363C313C153C1F3C263C2F3C293C0A3C3C3C2E3C1B3C0A3C113C0E3CE13B343C553C363C723C223C133C123C2E3C563C5F3C173C0B3C473C2E3C413C563C373C693C023CC03B113C323C313C643C2C3C213C183CD23B763C633C493C4E3C273C1C3C073C103C3B3C573C293C363C3D3C123C723C6B3C393C4C3C193C183C443C3A3C2A3C4D3C243C383C553C4E3C273C563C463C5E3C463C533C473C143C6A3C283C2B3C223C233C413C173C9B3C5E3C3F3C263C593C473C473C3D3C193C243C2F3C1B3C1E3C533C813C2E3C363C223C163C0B3C253C113CF83B1B3C0E3CFF3B0D3C263C8A3C013C2F3C323C183C013C203C143C0F3C1C3C1D3C083C163C483C593C2B3C263C5B3CDE3B0A3C1F3C093C443C333C553C2D3C453C493C4B3C393C5A3C4E3C193C053C213C263C093CCE3B013C163C143C3E3C083C003C053C533C343C653C603C523CE03B273C1B3C453C493C173C463BEF3BF73BF63BEE3B023CE83BED3BDD3B013CF53BE93BE03BF93B033CF93B013C093C143C1C3C223C373C553C2E3C4B3C3C3C383C123C1A3C103C163C233C3C3C533C753C463C1D3C4C3C7C3C813C653C2A3CEE3B183C0C3C493C5B3C783C833C763C633C943C6D3C683C523C4C3C1D3C353C543C443C4F3C413C803C5A3C3D3C8D3C6B3C3C3C393C463C1C3C2D3C503C693C893C4A3C3F3C2B3C733C943C633C413C3A3C5F3C203C213C293C963C4D3C483C3B3C393C9C3C813C653C5B3C343C3C3C293C1F3C133C3B3C653C583C1D3C8F3C893C3F3C4A3C543C373C683C223C0B3C123C393C2A3C4E3C193C8D3C533C143C5B3C523C5E3C2D3C493C043C113C353C303C1D3C4A3C3A3C163C253C343C483CD73B303CFC3BFC3BF73B163C333C273C083C093C363C1C3C1E3C1A3C243C253C103C103C1B3C253C093CDB3B1A3C2C3C053CCF3B123CF83BF03B233C183CEF3B173C273C073C173CED3B143C253C023C083C0C3C1B3C1F3C123C0C3C1D3C233C4A3C333C443C113C2B3C323C4B3C463C323C0A3C063C003C003C083C113C483C603C573C5C3C523C173C503C6A3C5A3C053C003C1D3CF53B533C6E3C473C503C8B3C483C3F3C2F3C393C583CDB3B003C173C393C263C403C2B3C1D3C5A3C3C3C483C563C2C3C383C1D3C003C293C3F3C193C573C4B3C343C363C1D3C4B3C403C4E3C193C2F3C423C393C383C513C6A3C643C5B3C853C623CA43C853C783C4E3C2E3C403C483C2B3C583C6D3C4E3CA53C713CB53CD13CCB3C9E3C2D3C253C313C2F3C293C953C533C693C7B3C5B3C6F3C983C5F3C713C7C3C3E3C1E3C773C243C963CB33C963C7B3C583C4C3C453C3A3C153C6D3C213C003C543C663CD83C0A3DD63CB93C313C4B3C1D3C3A3C1E3C3D3C673C023C2B3C373C7C3CCD3C9C3C833C283C183CEF3BC33B363C1E3C223C1F3C3C3C133CB53C393C263C413C013CDA3B3A3C3C3C4B3C1C3C143C0C3C443C183C453C583C023C073C1F3C3A3C2E3C3D3C313C563CC03B003C423C433C883C3F3C603C3B3C653C623C1F3C1A3C3E3C1D3C0B3C003C393C8A3C3A3C5A3C653C2A3C373C7F3C6B3C633C323CFF3B003C033CF73BEE3BD13BEB3BF23BFE3BFD3BD53BFB3BFB3BDA3B053CF03BFA3BD63BF33BE63BE63B043C003C293C033C0A3C023CF03BF93BEC3BDE3BED3BDA3B003C023C333C113C433C203C2A3C1B3CCE3B043CF43BE93BEB3B043C0A3C2B3C163C113C3C3C283C1D3CF13BE43BEF3BBE3BFD3BEE3BF63B163C153C1E3C103C223C1C3C2A3C0D3CF23BC93BED3BDE3BEA3BFD3B153C273C2C3C1A3C2B3C133C183C413C2C3C273CE53BEB3B003C093C2F3C1D3C343C483C543C223C343C093C1D3CF53BF23BFA3B003C063C0B3C103C303C5B3C233C163C233CF83B093C0C3CED3BF13BFA3BE43B023C4E3C293C103C163CF23B0D3C023CE53BEE3BF93BCB3BDE3B193C3D3C5C3C3D3C263C053C053CF93BE93BDF3BF33B003CD83BDD3B113C103C2E3C263C043C063CF83BB53BD83BEB3BEB3BFD3B013CFB3BD33BE83B023C003CF53BBF3BD53BDF3BF13BFC3BF33B013C013CD33BF73BDF3B033C003CC53BF23BD03BF13BFE3BE03BEE3BF53BDB3BE73BD83B013C043CF93B043CEE3B0F3CD13BE33BE53B033CD73BEA3BD63BE03BD63BCE3BD03BFA3BEC3BED3BEA3BE53BE53BCE3BDA3BED3BF63BE63BED3BDC3BF73BF23B1B3C013CF03B013CF33BDD3BCA3BD93BE23BD83B033C1A3C483C5E3C6B3C543C1A3C043C043CE73BFB3BE83BF03B0F3C303C483C823C7A3C743C3D3C1D3C2C3C063CF23BF53BDB3BF83BFA3B543C933C9A3C883C923C6C3CCC3CA73C273CFE3BE43BE23B163C1D3C543C963C913C603C883C983CE33C873CFA3B013C0F3CF73B153CFC3B483C7A3CA73CC13C793C893C873C8A3C043C103CF53BF83B1D3CF63B3D3C693CC03CF73C683C603CAF3C303C113C083CDC3B033C093C0B3C313CC73CFF3CDE3C8C3C913C5C3C3A3C083C013CF43BD73BFF3BF73B423CB43CBF3CA13C723C153C133C2E3C1F3C0B3CE03BEE3BE83B083C213C103C623C313C3D3C403C703C503C223CE83BED3B043C083CF33B0A3C363C623C513C1E3C403C453CFA3B0E3C063CEB3BF93B063CF63BD43BE43B0A3C073CF63B0E3C0A3CE63BF13B073CEA3BF93B033CC73BEA3B0A3CFB3BCF3B0D3CE23B173CF73B053CF33BF33B9F3B003C0B3C153C783CA33C593C4F3C343C273C723C5D3C3A3C0E3CB33B093C393C403C463C513C063CE83BE13B033C313C1E3C473C053C903B503C103CE53B0E3C093CFD3B053CED3B013CF33B2E3C203C673CA93B3A3C573C533C553C843C423C3A3C333C2B3C003CFB3B023C1C3C7C3B203C533C663CBA3C733C3C3C133C603C563C483C353C253C383CA43B053C053C763C9A3CB63C5B3C403C083C063C413C6B3C793C563CA33B0E3C4A3C713C783C873C7E3C4D3C153CFB3B183C5F3C773CE03BA63B3A3C6F3C5E3C313C4E3C573C643C1E3C283C0A3C313C1D3C463C493B3A3C423C4C3C6A3C023C313C383C403C383C153CEF3B133C1F3C873B193C3A3C253C393C113C483C213C0A3CD93BDE3B063C1D3C763C923B533C263C3B3C293C273C3E3C0B3CF03B053C003C1A3C1B3C403C263B123C1D3C4C3C4D3C223C3A3C2E3C353C443C333C103C2B3C0B3C813BFF3B023C493C423C4B3C833CA23C703C433C1B3C2B3C193CF93BFF3B003C293C413C9D3C7B3C923C613C553C313C513C503C2A3C0D3CE33B003C053C343C783C633C6A3C3D3C463C473C6F3C7C3C383C1A3C073C1D3C3B3C443C4D3C4E3C0E3C143C063C293C3B3C2E3C3D3CD23BD23B533C293C4B3C133C213C013C103CDF3B113C033C2E3C213C353C013C333C493C703CA83CB03C443C193C203C3A3C2D3C323C0C3C303CDD3B263C323C723CE43CA63C753C4C3C903C8D3C5E3C453C0F3C2F3CDE3BEE3B133CA63CF33CD43CA53C2F3C4F3C723C433C673C3A3C513CFA3B1E3C673CB93CBD3CA23CA13C513C2E3C123C1E3C6B3C673C303CCA3B443C503C7F3C913C6B3C743C903C083C013CF43B353C2B3C383CD13B413C2C3C4B3C5A3C3E3C853C1F3CE43BF33B083CF73B1D3C433C013CEB3B353C473C483C5B3C263C0A3CDA3B163CFC3BC53B393C6B3CEA3B553C263C663C3C3C543C483C183C033C043CFA3B083C2F3C433CD03B493C0C3C453C523C483CA53C2C3C283C423C213C033C363C173CD03B073C033C633C7F3C933CAB3CB43C6A3C243C4E3C243C273CFF3BDE3B003C053C583CA53C8B3C673C6E3C303C563C573C483C093C0B3C\",\n", + " resource_6665084973981360251: \"0x10000000FFFEF70EFA02E7CAEEE0F60C01010006EC00F7FBF2E1FBECF000F3FBF9F3030301F5F8F208FCF604F4EC140D0C0401FB050A0802F6FD0C060D06F1FC03FB09F6ECD9D5D0E9EDFD03F40B0C0AD7AFB3C4CEF8F5EAFEFFFF0C1BFDCBA8BBC8D1DCEDF8F8E50CF4F4E6AFC6F2E009EEDCF1FDE9FEE4D7D6D11623FC0CE8E1FC12F8F0D5E4F9111B1F23F4DEE8FA0B02F0C6DBF0072618FF12E70B0B0FF6E2D8D5EE0B250C0710F80DFA08F8F9E8E2E9D0FB0501F40703F9FB0AF90E080B100300070A0B05F5FE02090FF9F501FE06F70EFE01FB0AF6F8FB0A0BFEFB14000305F6090EFFF801120104FBFFF90502FC03FC02F90509F7FC08000709F6FE080D0401FE03FCFDF7EFDAECFB000102FF05E7F9FE0901DFDEE0E50B0501FB07EBE3F6F916F1DDD4D1FC00F70BF3DDD3F2FF240FF4E5D8E7FBFB07FCDCCEF5F60302FBEDFCEEFE0B0607E8DADE0D0F06FE0602F4090A0EFFE9FEDEE9141715F80BF80304F604EFF7E9050FFA08020E0102F80709F8FBFD0902F901110DF5FDF6F40803FA0CFF0AFE04040E0AF90DFD04F5F6020303F80AF8FA02FCFD0406F601FA160E07120BF8FD010207FF010404FD0CFB09F0FEFC0201FF08F7F5E9E6E7DBDCE1EF0705FE00F4F4FEFCEFDBCCBDCCE906020AFDF7F110F4FDF7FCDFCDE80A080F0FF9F8F5F10F110DF7F5E9F5FE01FC09F2ECF0263100140C050C010C010FE5E9F3091D1F1908F90CF5F812F9F8E0FAF81A240DFB0BF80A04FAFAEFEFEC0B18081405F80F050908FE03FB03FE07140DFF08020DF9FF050D1101F4F4F307F2F5FDFAF8060B07FCF7FD03F5FC0302F8F7F9F4FBE9E7FEE6F610EADDFDFEF9F0EACFF5E4D208FB0BEE09D8E6F7FADDE7CE00DEEFFE06FFF7EFF7F3E8C2F4E3F9F6F70F06100B1EFECFEBFA01E5F4F2F8FB0D19141F03C8F7F80CE2DEF9F2100E040F1009BFE5FDE5F0E2E4ECFAF0E3F00DFFE6DAE8EA06E5F8F1EAC3E8EC0700F9DDE40201F9F3DFD2DBE5EFF012E4D8DC0A04FC19EBDEECEFF3F2FCEFE8DB0AF7F6100EE2EAF2EFF0F5E5F8DCFF04171A18130FF8E9F2E7FBEFD6CDF306FB130702DECED2DEE1FDE7F4CBD8CBCAC9C1C0CFCAD7F60CFBFB08090A080A050CFEFF06090400E3EE00F6031317EC0CD6EAF8E8DDFAFBF6F403FD03FBFFDEEDFEEDCC06DEEDDBFC09F7091101D2070DE409F6F9F6F41116221816F00F10FC21FF18F8E1F61F090D010BF4EDD8070900EDD2E7FC061D15EAE9E8EF0C09FDD3DDE5DEF80EF5F5FAD9FC0C0DF8D1DBB9DBFEF4040B05E907FB0F0DFAD8EBF1ECF3F70903F1FB0706131FF4FAF20303E9F706F3ED090FF81511F800E9F9FCE40CEFBCFA04201D120A03EADCE0D8FDF8F1DAC5C7BBB8BCB6CFC0D9EEF8080BF7DEEED6EAE7CEE1C4DBE2EFFDF7CCE9E9ECE9FFDBF5F018E6E2E9E2DCFDF2F60B0C07F6F705E5ADD8C3F7E8F6F300FE1F061DFEF3F7EBECF8FF06FE0C09061EFB06EEEF01EFFD18061C0B0AF0F708FF0ABE00E0FB0C2307F3EEDEECF80BF3D2E3C417090C01F6DEFEEA091200AFEFE9FB07F9F8E9EEEAFCF51004ECE1F60D0BFEF7FAFE060209FFFCDCE1F9F200F708FAFDFD071B08ECE4D4D01BFD000A0E020AE7EEDAE004DBD8E1FE0016221106F3D6D8E5D8F8EED9CADABFBDD3BCCABACFDDF5FCFFFDFF0FFBFBFC0FFDFC0CF90AFF08060712F800F8F5F7FE06061300EAF2EEEADCDBEFFBE2D8E4EDD9F6EC07DFC5DCF9E8E9E7E2EAF3F40103EBF9F4F6E8E8F2DFE3E301E11B09E8E8EEFAE605F0D3C1F3EBD804F0C5E9F5F8F9E4CEDBFBF9F9F003E2FAF4FEF3DECACFE9ED0D0CF8F5DBEEEDD8EACFC7F90BF6F6FE06DEF8D4D4F8F6DE0715FFF712FAFCFEF3EADCE20B1700FDEB05FFFAF3E7F9FE050B0F0C10FD0CFAF8E40CE9E40CF50BEDF0F3EFD8D3E9E60EF3F8EBE8C4C5BDCFC9D6EDE2F1F302030AF0FCD1F6C9E7D9D7D6D5DDFA02F1E6D6F3EEE3E8CCDED6E6F4FAFED6FD02E7000D00EA000DE3C90BE0D6F8F20412F3FEF8F51514F4D4CBFE111617080C0503031012E1E4FFDC29240D1114E9E4FD0612E4F8FD00241F282901E8F7021F27E2F2FB1C26212C1AE0F70A0F1329E6FDF6181D20281C00161713101ED002F914120F2202111811031CE7DD1EDFE6ECEA00230107110220EEF0DCF3DEE9D0F7F60AFF0F0102DA00F4D8FF03D4E0E4D3E8CBBEC9E1E7F3F6DABEC9B0C0C9B2C8CAC809F901FBF908F40EFDFEF802F803FD0505070AF7FBF4FCF5F4F0F3FA0803FAF70E03F7FCF806EAEA01FEF60A01FC04F1E1E5F4E2EEF5FD041704F5FC01F2E805F4F2F20B01110D0E04FDFBF5100E08250404051B2BFFFFF9FD050C0F2626EA0EFC111BF90DFC00FB18124317EE1006111A0E0C00FAF609202AED02030FFB0DFFFD01E7F8210C0AFDFE0A000B0109F50CF5EE1E08FCF4F7F8FE09F6FEFD06F8010013F90A01FFF7ECEEF90C071002090600FA00FBE2F70908F7FA030201FAE1FAEEF60303F6F5FC0B07FB09F5FBF8F7FB05F8FBF700F90F0FF404120B1A190403FA040105F90C0300E20A010D0215FEFE02FB02E0DBD5E603050307F1030002FCEFF1ECF6F1EE120B02EF04081209FDE0EFE701F7EE0FFFF7EE0EFBE3F8CECCC2DC0C07101CF8EE0900E9FAC5BFC6B8E30E0503E2F6FE0BF504E9BFBCCFCCF209FBF9FC00F9FD00F101DCDC210C020302FD04F7F9FEEA0A2408F9EDF3F2EE0201F7FD0B0E001200F7D5DBF0F803F507E8FEFE0F0C13F503EBFFF0050000FEFCFBE6DBECE4E9F7FAF40209F706F0FFE2BFE5C0DED5C2DDEBE4FFF9E1CAFEF4F7F8EEF2EAF5ECEC03E7D5E0E7F9030F040BFE09F2C813DBD7F9FEF3F40718180B100CE10A06E6ECFC070C0A1F1C2C2823E8F804EC00ED0A04060B142F292FECF70BFA0D0F1913F8F5F41E1927FF03DA060C001A2208F5ED080E14FD0ED4190E130D13FBDEF9F80802EDFCFC0A15271531FDF0FCF6E7F4EEFCDD100D1A1A1AEAE9E2E7F3F0DD0BF5E2141E170CD8EBD4C8D2E2DE0FFA00F1F7D1D0A2B7C6B2C0CDE50BFBF0DEE3D6D0DEC2C7DDC1BE01070103EAF2B4E7D6CFE8BFD6E5EA0CEBE8CEEAE1FEFCE9E4D4E6D6EA04DFD4D3E6F4F113FB02FC02F0CD11EAD6E4F1EDF1120E1C121C0ED5FA0BE2FADF0B0CFD1B23190F25F40DD9F0F4020D0B02FE271D2D23EF08FBF10D1D18291A08FC0F121AFD09E5041A1F182F1EF10B1011240206D418151F292FFE000504FF1AEAF70A1B12241F2AF9DFF4F9030CDC07F6180821281FE7E1D2EAF4F1C90DE9FA1614171CE9D0C2CED7DBEB08F9E7E3D8D3B9A4AFE2ABC6CCCCFFFEF9DCEBC1C4BBCACFC6C8D004100CFA03F5F3081C0F18130A0E020B0F14ED05FA071108170FF4F808F80F19FFE7FDEC01FD071A08FDFF0803F5F8E8F2E3D5DC0800F4DCFFFF06ED08F7EDE4F9DADAEAF8E40001FDEFFD03E4FA08CCBBEAFD03FF0D0FFEF9FFDB0401BBD4C5F8F70B0409FA06F8FD04E1BBC1D4F30E020305FDF3F0F2D6D6B9FB0F111F15FBFFEA172009FCDBE61B171B01FA07161D23231604D2CC100FFEFB0F11FA04E90CE0C6A5C3E6EE06FC080602F3FCF5E7E8F3FEFC0EFA00F81109091514110F0A031713021305070EFFFD110911FF0812000DFF1515FE0311131915010614020A0B03110A0F0C0F07FA05FE050E090D09000413090E0F01220711150C0B160D08FD110A190309180F0D06FF0A0F101605160C1B190815061009160A040D02221D060914100F041107170800050F1EF6F1101E0C11010B12091306181D03180A211615051209FE051C153D1F19220F18030709110F150A05150C30051306020D000D050E04140F1623110B130814FE0916080210201C1B050912130A130F0610170BFE120D05FF04160106FF04170D09091416151104140C15100A1718140A07000D020B110716061600151B1A0203F90EFF0906170E14110912130C1A0612FA02040A17040D020D1A00FAFE031815050C0502081A1419FFF1DEF707120F0F070C0C02131E0DDDF60F190F0101FF101910211CF602100702041314080A001E1E1C0A1917071B0C04FE160E2013121309FAF60216100518161519130D2AF2E3E80C0E000D160A171C120B180809FE1D070D1C041212140618081914081819010D130606070B100700070D120B0A0616F40800E2DEE41EFEDAE1EEFAF401FED3E1E0CEEEE4C3D4F5EDD7D009140600E018EFD4EED5C8E5EDEBE1DB0704F5EB02EACFCAC2F5EBDACCE5C3FA01FAE4E1DED6DFF7FADBC4FEC6D4EFFFF7DED8F7F8E8F3E9ECCCD6EBDCEADDE9E3EEFEF9EDE3E4DFE1ECFDECCEC6EDE5E2D8E2F7E700CCE8FFF6E1DAFAECDDF0FDFDD2EFC4D4E4F4C7CAFAE5F901FAFBF2DF2AE9FAF4EFF9FF0419170905FED40F22FF00F7F0F3F91903F5FD17F7B5F0F40F03F90C0405FFEBCAF9FBE3CCC6EDE2D30FDFB5BFDAE4E50A160B0B00001E1203190B10171012FDFBFE0F1A2813123008F6F21013F60CE203F906FC0400F6EDE400E8090D01FEDFE3D4D1C4DEE1E70DF1EDE6F3FFFFF8F6D7BBE1E0D007F7F6E3FDF4F011FBEEE1E4E9DD05E7F4D9EADCEC04F3E2EB01E3EB0E07F7E5F4E5F3FEEBCBE6F1DCED06FBCBDCF9E9D203F6DED5CCFADD12EDEAF5E7DAEDFEF2DBE5F20EF30EED19F10003F90BECF2090F010D0EE81D160F0BF9FFF9071A07FFFFFB01D50802F30F00080A0A0EECDB0001E1D3E1DAF204EECEC4CEF0F70EF6F3FFD6DFD31B2816050BDFE8E201FCE6FAF9001108140718ECE9D41608F8E5DBD5F8F30208090BEED3D40B00FAE6F5DEEDF60104F0CCBED4DEF0F6E6E6F4F8FDF50805C5C0F6D7EFE9F2F7E0F9F7FFF8EDD4D0C4F305ECF0F106F9F1E5F5F0EAE9C00CE406E9F3F3F8CADBF1C5DDDB07D9EADBEAD9EBE8DAD5F6F5F0F4EEB6DBECD7D80AF5ECFAEB0D0BBEC6140B0C0EECDBE3E4E6EC0D0E25D60C140901EEF3EAFA0908020411FED9E90208EDED01050C0BFDC9F50BEDB3CFE1D5DDF3E3B8B5DDE60604120C0605080FF90E0EFE11030F06F3E9E9F5FCE5D9F1FF01E5F8081B04E3E6E7C6C8F0DDF311F3F8F7100E0BEEEFDBD8AEB1E9F8F4DDEAFAC901F6FFE5D7D6C0E0F3FFE7DBF0DEEF0709FCE6C9DBEDFFFAE906F6F1E8E3F5FEE2D2EA06FE02DCECF7190D120901B4CFFBD9E6E2020B06FF0F0BFBE9BFF4E2C8FDF6F4E408F40C04E4D1E8D9D4F2FD04FB10FD02FA111AF1FCE80E090E130F16EA2229200CE4E6FAFB0F03FF011900E601F2F9FA01FCEFFB13F7F6FAF8E5E4FCEEFCF2E0DECBE0EAF4F9F3FF01F2EBC7DA1424F9FEEEEAE9001FE8E7142007260C1A0AF6EEF1F4180EE6CE0909170F19120BFFD10AF7F7FCBCE4EBE601080907E0D4E6E9F1EFE7F0F0F1EE13F805D7C6F4CBF2E2EEF7D9F7F5F5FA06DCE2F9DF04F30AFAFAF301FFECEACEC8D80705E50D120B0305E0EED1C0CD0BD3E5E109EAD607ECE4F5DBF3F214BDE5E8F4E6E2F0EAFB03021112E8D8162EEFE9DEDDE2FFF808FD0DE6F21C1612F3E8E6DEFDFFDDD3FEFFC20CEE14EAE8EBC7FAE8EDD51801DDBDC8EECF0BE1A0BBD9EEFF04120A03040D090413010B0BFE070A160409020113100205180B09150C1404FD070F260B1B17020C040307100A160A02FAEFFC12FDFF00FFFB120A110F10F2E9DE060AFA07FD0309030A1218EFF5F2FF0F12F9FC010A120500100DF50E1A0E0A0A04080710061A11FDE1121204F902010A0B03FF090DFC040811E3F3020D03FE01170FF30A10F5EAEFFE010E06FE020A18071703F1FE0909150A05110C0A0804100CF6FEFC09160111170804FE051009070F0F190F010107170A0DFC0BF8FD12FFFE0C0B0012160E10100D1B090B1A060D010B1517020B020A0A0806FD1615070816150513FCEEEFEFDD080B0B0B06081017FCFEE8DEDFE3E8E1FE090D030A03FD0EEDD0E7C8D7E4F707180B11161620F4ECE5D8E60B0B0D171007F8FBFDFCC8E4C8090DFF0E0A0018190F0ADFCCEEF41408180CFF1901FC1EF3D7F7F5D70E1903010E180F0F19E1CCF901FC12190A14FF1308F902F5D9FF082D1C1E180D0F161E180900E3FE1B1813071C0F09160208FEFE120809041C0C0A0B031711FC00EEF30CFFFAFF11040E15010BF4E4CFDC1D1716FF0DEBD6F10A0B0CF405FAEF090EF816E7E2EB131CFD0CFC09FFFEFF081605F4C70DDA000D0F04FAF2FFF90210E9D307DEF506FCF4EBFB03090204F0CB08E50EF6CEA3DCFD0E0201EDDEE70CD50BE8DEB5D5120E02E8DEE2D31A0D12DFECD8D80F0DECDEDCE4BE13F6DEC4CAEBEE12F6E5E4EBECF40EEFD3D4EC0D0400090901F0FB0610F00FF6F60C020405110BF109240D01EA02EA0A0C11180C0D00CD120B00FBF70E04EEFEF3040704B2EC15F8F6EAE0FDE1F5DAC8CBD5E7F40AF5FEE1E2DA1A110A0AFBEAD5F91413F1F90AFDF0FA0D0412F6E5EF140F03120A1E0E131A010D1301CB12EE0C021910F505F2FA150503C4FEE500FD00E9E61CFAFF03FCF1BFFDED08F5BBB1E50D131103F3F4D906BF10F5DAD1E40C12FCF2EFE8D107090DDCE0E8EC1912FED9CBC0BD1512DAB8C5E202130FF5E8DEE8EA15ECC7B9D800F809F4FDEEEE02160E09FACEE3F8F0FBF4F80505052DFC11CF1501150B0909FC170DE51CFBFFDC1D1B180007EBFE0702BF0614F7E2C9CAF3DDE2EDB2C5D6E9060AF203F60F19FEF212F5FB03040207FDF50A1B0E05FCFBE5F5E1FEFBF40403010CFFF6FCEEF2E6EBED03080702F9000701EACCBEC3E1F704F6EF0C060800DED6DBE4EBEEEEF0EFEB180EF8EBE8DDE0E7EEF0FE1AF20A1137453D2E130A09F5043325051E1C352B352B191D221A2E2B28F50F12061C0F210A13122A281C18FCFEF9F2F40616192A2431301AFAF605E6DED6DDE20C0D1D434E2DF701F3D7E3D7D6F2FD083021251900F1EEEBF4D8FAE7FF0709000A0A080409010108F506090AFD040401F50A02F50BF7FC05F8FEF7FEF50704050503F400F0F503F1FD03FB0802F8FD0A02FFF9FEF4F4F6F7FD000B01F6FC0305000307E6EDF6F1F5F6F90AFE130516151EF2DAFBF0F7FBF809FB0D1B34242D0EE9ECFF0801030C081938332F3C06E4F4EFF80604F2050D1E19FE1A0DFC0D07FA07F8FAF7EBEDDBE1E2F6FF03090AFAFFF2EBE7DDD1E0ED010D16F9FB030508F3EDE2E4F1F70B211214FCF5FC0101FCF20807F90B100AFF02070508FF090E02040BF3F6FD0AFDF8FE09F6040207F8FB0B070AFBF201F4F102F9040302F1090204F900F5FB020BF3F202F1000902FEFFFB00FCF70A02F807F2E7F7E5FCF6F100F4FD030602020CFCE5E6E0F9EFFA03080E0B161A1A1104EBE3F6F2FDFE000610192B33231BFAFEFDFFF301080A282026231F180712000AFFFBF900021710F60E1F160A0E0A100A02FBEEF4E60123FB181719160700F7F8FCEFFFFA07F60AFA1104FF06FF0300E808ECF7F7040E1200FD04080AFFF706F9F70102FCFDF7F8FAF802F50800EEECF210F50CF7F7FAF60509FF020100F4F9FAF9F804FFF3F4F3E1D7E8170AEFEB08FE07EFF5060C2B2C394B2901EBF91307EFF5EC120C1819221A2403E0EF01E719EA080A0E0C161E1D16EBC3FEDB0BFFF91B020A190DFCEDF6EEF4B406100DF40CFFF2F9F7E2F3DFE9E9DEFCE5FCF0FDD5DEE2EADEFC17E918CED5E6E505F7EBDDDFF914320828FFE1ECE8F10101EB080D183BE70F0702EAE9FCF8191718131A1516EDF0F1FBFCFF0A292E2C1E08190C0D0903040902FC0A342E030EFEF8C6C2D9FDF5FE0B0C120C00040309E3D8BB9DC8D3CEC8DEE0C2DC15FC0A08F30103FB00F0FEF8060AFEFAEE05101314F8FCE7A5B10110F2F1F807081A04102B0B1CFED2DEFBF518EBE8FF050B1A14171DDAC403E2050B0114F810081617FDCCEBFEE0EBF0EDF5F9F4050900F9E7EF05DFD2FCF6EE09EBE6E2FAF2E919FC02FDF7F70DFCE6EADAE3DAF02E1A020A14180A07E5EBFFDA042040140821180419110AF203FE1F1A1D0F09F90010040EFF0A1816121420FC1319F8F3F50006F40F2414060707FCECF2000212FB040A020B030CEE0ADCE9D2CCD801FD0BEEEDE0D30A0BF3EA0AF90B07F2E8FADAE91C0AFFC7F1F80A0411F6F0D5EEE1CCCFEBFDF5F51019FAFE05DFE9FCD3D9E212FB05F31901F8F4EC07F6EB01E908030001ED08EEF5EE0202CCDADE0A12DFDFF0EC05EDEF0104F310D9FAEAF1F4F0E8F90B01F8F31321EAFCFFFCF512100FFD03F3161E4A0411041919111B17FBFBFA013240CE181320020A1A0817F916181941F509F1091607FE05FC19010F290E180602F802F1FCF4082A1E021139DDC2E5EC0305F3F9FF0308190AEE0CDAC2D8C4C4E5FCF4EAE9D9CC07FBFC04F8F3FEF3FCFFF2080D0504F8ECF9090517242AE5DDE1DDF41108EB1314372F22FFFAEAD1C8F605E70409251E0C120D11F6DFCFED14F00F101E1108160EF5E2E9F706CAE3031531211B1207FCE10512F313D30835252511FCE6F7E90E17331AF5070B292E03F7F8F8F9221B4115F4FD00150C03061512121E302A3408040403FD101508231E17022009EDF4F8EC040E080E0914230A15120B0FFEFF110A0603FF1A0B1211ECFDF7EDF0F50A110304FF07080B0BF9E0EEECDEE2FAF8E6DFE7D6FCF407F6F6F90702F2E1F100DAD91A0B09F2F0E8F50D14CDEAE9E2EBF5FEFAE2F9FDF8EBFDE0EDF5E5FCF9F3F5FD142207F3FBF0E4E9FC07ECE1DDF41C00E4E6EACCE7ED111003EBBD0D01DEC1C5CECDDEFC0C130415ECDFF3BAC3C3E5F5F10E0F0F1A29EF03152502191313191B19FF0C0C0529233E40322E271301FBDCE62FF9232720332B1713F4F4E2E404F4F6241826201117FDF6D4CEDB08F4141C0500FAFEF7FAD8E3D4DF17F5F8EAE6DFCCD8D7B8DBE6DCD6FC0601D7ABE7A6E3D4F4B5D7CEC6FF0008FD0901FE01FD0A04FFF301FF0604F7F3F6EEF1F5F5EFFDE2FF06000209FE13F3E7FFDDE4F2EFFE0AFBF809FF0404FDFDF9FAFAF2F6FD04F5FA021A070201FC0208090002F6F407FA0CFFF9FEFB1412050C0D000A041A1BF5F1EF09FDFC1115F3FF0008040C01EEF6F90CF804F3F4F70AF3F40CF20F0D0CF4FCF900F40D060008F50C0C1B0EED00EE020406F90500FB090509F7EDF6FBFB0A05F8F20506160A02FDEC100FF703F802FA030CF6F204E405FB0003F2F5070208EFF2E605FFFBFCFD04070A0300F3F7F7F605FD07FAF507F9FBF2F3F3F3FCF9F91F04FB02F8020605FFF5151B1E18151C0B07F1F7FEFCFB020C1313061D181CFDF209F301180E161A2122130C09E9E4F90A07FC181C2928343025F3E3F5F3F6FAFF1A33361D1109D4D6D8F5FBFAF2FBF002F6F1D9B7C2BBEB13FDF4FAF2F4E1B7BBCFD2CBDF261D1204FF0709D8BAE5EEE8FE182F0F14050405E9DDEC00F917213A2D12FCFC130F01F305F2F6062F1F0500FEF504EEFE110209FBFF0F0502F5F4F4FB0005F7DFEE0F1308FFFC08F3FA0307E800162706F106F5DDED0E08F7F8D30D080F1305080EEAE5DA0006D3F2FC01F20E0A0E0E010CFD0F0CF1EDEDE4F0F1040905FF13FDEFF8130FF0C2ED0001061A1309F1EB0AEBFAD8CCD9EBE6FC000CF7030602DED9CFD2D4E803F1F2FAECDE1603E2DEC8CCD9F7FEEFE2EBCCDC2002DCFAE4E2EB0B02ECEEECF5EA01F6FAF6F500FFFD0605F2F90CFA08F9D1E8F80001F5EC0D14110EEBFCF8FA0B07F7F2D0F7092516020909070105BBCEC0C2BED404FBE8E6F4040DD9B4B7B6DCA6CADAC8D2CCEAFD03EEF1101003E406EECFDB1E1AF4ECD412020F14080014F3E0F7FFFAC906F9F600FEFF0206FA1AEA0AF7F4EFEFD4E5EF0200030817F4F2FE1213D5BDD2FBEA0B110E12F7E10CEEEECAAFCDEAEFFE111316060BFDD2C7A1B9BDE3F7F902FDE0D5290AD6D3BEA2B4030DFEE8F0D3DD110AE8E9E5DBF2FD0107EEE3E6D90F08FBFC05F709F7F5F9E9EDFDF5FEFFD4FB120304FCEDF3FD16FE00F600E5120005E9CFF205250CF809F0F7FAFFA7BDA9C3ABCFF0F2F7FC04FCF7EBBB92AAD0A8C5DFDDD8D000EFF1FE07F0F104FEF9EC01F5FF00F4FA0B03FB02FB0914060A0AFBFBFAF7FBFB0911080CF7E5E0F4F905F2F91919131B04FAE1E4D3D1EF02070B161311081D221FFAC9D9DAEF060F030A23353C391D1503D4F3F9EFFF04080E043E201813FF00EEF8FF1103F001F913F5F5ECF80701F4040A1F0AF6FDF6E30FF1E1D1CE02FA0D0C1419221A1F08EBDAD6E2F9060F1A1E181607051CF7E7C5EBF6F50E2B212B45332F2D1AF9E90104F2F2042D3C493E332614FCF7F8F1F9F300F9F8F5F6FBF5EF03FFF2FCF3F1F20603FAFF06F3F0EEEEF7EEF6F909FAF903F306F00008F2FBEFEFF9F301F301FC04FB04F6F7F4F6F7F1F2FEFBF8FAEEEDE2E8FEFCFBF209FEEFFB1403D9DFE6FAFAF4F8F300FBFE1405FCF3E1E7F105FDFC04F408150F0EECE6E7F4FFF8FEEEF80508161F18F8FDF7020F050608EEF00B1E292F2804F5F4F2F4EAF8FD02FA121E1E1D15F6EAF0F8F2F9F50407F20006130DE0F3F3EFF203F504FFEF1009ECF0F2FFFDF308010408F8F1E9F9F9E801FBF8FEFD01FEFCF0F705F3EFFFF0EDF3F3FE0401EDFEF5F4FDF5FDF6F204F5F7F2EF0706F105F9FBFAFFF1FB06EDF1F0F0F7F3F801F9EBE5E1E8F8F2F505FDF3F90E05E8DDD2E9DBF6FEF4FBFD03090D0A1B161305E7F3F0EFFBFC131E312D2DFB19051E06EBEE05F00B19251BF1FC1A121619F5F4EDF8F40418F1E5EE011303E1F40203EDF20BF5F4F407F5DFE4D8F308F2EDDEF4FBF002ED0CEFE9EBEEFCF1E9E9E7EAFFF20F0FFC04FB06EE05F8F6EFFFEFF41B010BFDEDEDF7F002EDFBF9EE080CEF08FFF4F405F407FAF9F1F901FF04F4F5F9FCFA0304F7ECE0CEDECCD2DBF3FB0D0403EE08180A2D382C0FFACAC3DB09F307042217121726161AFDE9B2EEFA101E2B142624FD0BF5F5EFE5DAD307180A08100CF0F2FAEEECE7B3B50EFAFDEFEAEE0102F40AF9D4AFC1E4FED2D9DFEF131F2220FBBFD517EFC8D8F3F30F282D1719E9A3D8131B09F401060F1F100704DFF3B3FD1A33130E1828191106F502E3C4F50E2D241A09010C01FEE700EFB2F30809061109FE09FFF1F7E7DBC7092832260D18FEFE0710F1F9E6E409DFCF00F90B13EB0A0B00FEDD02FE0207FBF7F7FCFCFE04F7FBFEFCFA21170B00DAEE0DD4BCD0C9E6F1F7020C130813191E07F700D7C8FCFC1A111E0A1613111412F8DFD4F8EE15170906FB0801FFFAF1D2E1F2F104F3E9FB0612F3FF00E7F0DBF2E8FAE2DDEE0609FE0A12FF02DAF901FDCEDEF10C0E0A161108FBB5F40502E5D3E7EFF710180F07EDFDF1FF0C1206EDFB11050B0FFBDBF6F3ED2010150AF8FDFC03FCE8EFE0F6F91019130B070DF80105F7EBCEFC061A040F1610FC0AF00701FCFB03FAF91623361E150C161C1CEEEAFBFCF8F6D6DEECF0D4F5E4BAB8E2FCE4EE0616EFFAEE0F11F2EBE8CADA031C1A11FE1A031000DFEDE2F6D3F720181412081303020BF4FFD3AFFA221B06F8F80C24221E1CF3BAA5C205FFF4F90724241E281CFCD1B5C401E4E1D3FC1F14221A00F7D3D2F7F4C4CFCFFB091214090903E8B90F15D2C7D7DB08EF1D0A0401D4D40C15FDF5F206FF16FC16040FDEC3FD13200CFD000710061500FCDD9FF8FE0F0C0915FC12090BE9E5F0C929192F14101E1D0202FFEDECF4E004E0EE150C240504F51013E7CAE401FDEEFFEEFEFCFFFCF8F6FAF2F1FDFFF4F00500FA0EF5E402E9E2EC0304120A0B1C1007D9DED2D5E5D80C04231225270908F0F9DEE8FDDDF71C1E282A2D251F180E08E7E5CEEF1117383232272337291B00E0F4DF1223230C0D26222C350FE5CDF1E60BE5D3EDE60B23200FDCDAC70500E7E5EEECF7161405F5D2D0F5D2FAFCF8FCED1E19FA01FBDDF6DAD3070018151C060820050605EEE3C605FB0401071B1418FD0AEDFEF6FBFE14130F2115191B1D071013F3EA13F4122306180400120EFD01ECF302FAF4DCD8D9FAE2B8D9C8C0EEED03F7FE1412EEF9F0FAF3FED2ACF6FF0E2605F4FFDED7F4EBF2E9FBDBF30FF9FCF5D9E6FBF0F2FFED01C2021E1908EFEAE909181C0D13E7C4EE1117EDEF030A2D1E191E0EB9FCEC17FBF10406071C090A00F1E6AEE000E3AFB6B5D4EFEBD7E2F405A80DE8E3B190A3B2D7D3FDFE2012D7FBFDE0EFB9B2B5CDFB13F91BFFA9F908F1D9D5D2E40A05171601F8C3FFFB02F6D6F2091711160A0AE7D4F62DF210F70C1E32300C19F7F2F10CE5FC14E8FBFBDDFC23D9C6F802EEF0FDFEF6F4EF02F6EFF0EFF7EEF8FCF4F9F3EFF0F0F1ED04F3FCFF0802FD00FD04F5D2F3E3FBFBFDF40008EF0803F6F4F3FCFAF9EBFEFDF30508FC01FCFB0F0EF9F6FAFDF807081313220AF5F8F30E07E408FCF4F20D1E0501FBF2F7FAF6F5F4F5F80AFE09F1E7EA0BF2F0FBFB06F101EAF0F4D8E3F303EBF5F80602EDFDF4E6D6D1E1DB0001040504FCF300F3E3F5DFDCEB1309FA000AFDEEFA0AFB08F5F707FC080B0AF3F7FCF506FC030509F7F8FCEF090802F5EE010400FF05F90DFAFEF1F5EF030606FD03F5F7F1EDF801EFFB03FDFA0002FDFEFE00FBF3FAF5EEEE04000307FCF92A27380CF4F60402F3020BFD0B1A423F1CE0DEF2F200F90008FB1914242903DDC2BDFAF1FDF70F0C242D1FFEE0C2C2E6FBFD04FF0D071A111020FCF500EDF300EEF9FCEF111D253923101106FAFA05F2FAE3102D4D5E4B2BF8D7F4EC07F6F1EAFD27545B2D16E5D3D200F4FBFE00061328350FDBBCDCE5FDFAF6F9F90A1205FCE4E9DBE7F9F3F1EEFAF60E06F4ECE1EFEBFA0DF9FDFF010D0D120506EDFE1904EDF0F5F203FEDDE0F1EAE4E1EEC9BEEBEDFBF51A12040801090A0007F8AADCFF11F405140310FE0BFC020F03D005D6FF06F6EC03070A111007FECEEAF0FCE3AEBBC9E1F901FF0CEFB4F7E6F1ADB89BBBE9F7EAF4D8ECF4F3E602DCD1B6C1EF00FCE6D2D8FDFB1C2F01FCF6E0F4FC1504FAFCB6001D1A1820F7020E1011101105CCF80B1D0E00F2ECFD060F0C0D0CCC04311611F3F3DEF9F600F7FBFBBDFF060F020AE7E2D8E3F6EEDDFBB6F70DF71B08F7C4D2D0F8EFEAF2EBF50CE7C1C9B0D6DFC8FA02DBB8FBFE0809D0D1FAEEDDE5E5C4BEDEF9EFEA29100A0200001417FCE89CDA020BF91B140715080F021600F5D9F7F3EF0701E2FE060FF90209EFC900E3E5D8A39DC7EFFF04F5FAF8B2F1F9FDA6A89CA8DAEEF5E1EDFCE1F2EDEABEBAC3ABE8E5F0E3CDD1F0FE320DF9F5D3BAE9FA040FFDFAC5F9241C09FBECD4F7070D070603C2F5F42300F6F5EBF60506140312CC01360CFA01EBC5EAF003F4080AACED1F0202EDCDBDCDECEAF2FA01C3FA07FD07F6D1C8DBE1F006EEF7E8FCFCDE9EAFBBE8D6D0FD0AE0C505F7F408EFE2D1F5ECEEEAEEF0FF09FDF2F9F4DFDEF3FCF714190F050D07EDF8FAF3EAEAEB0AF8111E0CEEFC060DF201E8E2CFF40A23251B21F900F5EEF4F0EFD0F00C200B03EFF9FE040E1A1002E2FEFB0AFD01EF09EE0CFB09FC150E1018141708F80A13020A02010AFF21FB191103FDF6FFED00F3ED191905F80A09F0EC0A170C09F3E7ECFEFCE80A0C02F0FFF5020708EDE5E6C8B3EC08F302FBF5F3F6EEF1E0EFDDE1F91604FD080212EFF0F8E703F8F802FEFFF208FA0CF9F5FA061007FC0F0CFF00050301FF070AF8040501F2F208F6F40B050703FF0F15110AFF060D07F9FBFC03020A110210F703FEF7F9F7050805031201FB0B010601020BF6080BF6FCF1F7F2EDE202FC06F2FB05F6FBE6DF0917DDDD0F07F4F5FFFCFAF1E6DA0516DDDBF6030207FDFEFADCE6F90B0DCDE7F402F501FDF207F0E4FA08F2F6EFFA01FEF5FAF1FFFEF904F5FA0702F305020EF8F501F90F0AF909F0FA08F700F4F20A020A0A0B020D05FD0CFB0CF9070802FCF3FB1A130204F9F7FEF504020CF701FFFE0FF8FFFC00FBF4FA01FF0900F8F4F70000FB030905F4FBF6080A09FEFDFB0D060B07080101FDFE0D080D0105F3F70DF805FAFD090308030C19FCFB06FEFEF907FA040CFE040B12F7E20902F80C02FE01FEFD0B0F1A0CF6FCFCFB06F5F6FEECF4E815F9E8EE06FA07FBFD03FDE2FAEB0BFBF10203F9F500FE04FEEEF903EE0AF6101305F807F40101F2160BFFF9F703070205FBFBFA01031809000FF2FC03FB08F4FD01FD0B15080DF800021307FBFC0407F7FF0C1302150EFF080B06050C0AFF0DF30B0415FA12F2F6F3F507FCEBCED7B4D5B6D7D6D5EAFCFBE9D9DCBDB9DEC7C3C5EEC1D8E1F3F001FCF3080006EEE8DCDC050FF9EA0705F8F6ECC6BDB3B6D3FAFDEEE9DB0EE9E5D0C0C0BFC0E1E80A0DF7E4F5E0FAD4D1E2CEC6E5F2EED4CAF100FE0CFE01DEE2F506F5F1E4D6F11D160A141B0DECFF090DE3EF1AE3150D090509FE0D110605F4EEFEF6FDFBF2F7F1F309040CFEE2D5CDF5DF03E4D9D6F0FB04FFE9DEDBFFC8D2DBCDCCCEE9ECF40A0AF2DE0CD0E2F1FFEDEEF2F614FB01D2EC02D700E9C1F5D5E1D7F6C9EBEFEEF406040B060902FB0CFAF7FEF50DF0FDDBD4E0F4F50EFB21020DDF08F0F6F9F3F30B02161B1B1C20FA000AF3ECF0F4FDDAE1D0FBF01D140508F701EEEFE0B3DCD8DFE3040E0F07DAF2F601EEC3D7F5E2DDF9E406FBFCF5F7F4E4DB0003EEF1F1E3F20CFF0D17FB011A07F611260400FE0A170F0E0B1B0D151D0B16FFF8F20FE702060504050F1314130A09F20BE1F9FEF1F6F5FB15050CF9D0FFF0F5E6F9F5D7E8FBFA0701FAF3F4FFEBD7E9F7E1DCE5E7010CFEF708F90507F0EFEAF1E402DFDAFC01070BF7DFD0ADC5C0E3BBC1AECAD5DDE4C916CCEED1E60D020A13252F0CEAE7F7FFEDDBE9F7F505190A1307D4F8FAE0E2E4DFE9F50B3220FA14E9EF01F7E4FAEFD9F0F4F505F4F7FBF0E1F80405F3E1FBF7F2EDE0D7E2D003191714FDE8F3F6F4F6EAD2DB120B2516F9EA00080D0FF6F1F2110C16250BFA0503FD0D06E2FAD40DE4FE020AEEE7EDF3EFECF609C4F8E0F0FEF6EBE9FBDBF6EAF1CAE1F2C8D5EBEAE0F4E5FCF7091604E1F9D306F9FFE0F3F60A201603FCF008F7EEE8CBF3E1FDEEFBD0DDF50004030D050E09FE01F7FCFDF406F7FAFFDFF9F3ECE5EB1810F7E2DCE1FEEAFD0BE8FBE5DEECE403182CFEF502F1FADAC8BFD1BBE30627EE0FF902FEEBD6D1CDDEBCD0061B091AE4F8E0BEE3EDF7CFACDEFD04F3E106F0C2D4FD1715CBBCFE211DF2F1FBFAFA12091B110002201AFEDC070F1414080B0907070D1C1503F5F80107121A08FE07FC0D070C0408F2010C051012F1F4F3F1EDF8E0E8E808FDFAE9E8EDD8EFE8F4FD19EDFA00F8E9FFF6F7E8F1F50C06FBFF08F4020EF0EFE1FAE7EFDAE0FC050EFB03EBEED1C9BFD9D2D7B9CFCEE907EC06C8CCCDDEFCFDFD0E1804F60DD1FF0303160D312D252E1726F8F3D5FD050205091A29453034081DDCD1DEE0012423233835292106F7D7E7E6EF162636062B212610F7D5E7E0EE1E271D21E90C0E0FFCD6ECEEBB051116EAE0E40D0904FCDAEC02FDF80808E3E1FC00050101EDF4FFF603F9F2EBF10006F0FDEEE9D6E5EC01050F191208FDD9D5E1E7DDFFCCEDFF0D1711FBE4DFF008DEF2FBD4CA00050DFBFAEBF5F4EEECE9F7EACFDDF8EEE4F4FDCCD5D5FFF60CF504030CF300FFF3080DF8050C01FDFEFFFCF4FEFC0F06060908FAF8FAFA02FB14121818181B060607F904EB07231B1F2F28231510F8FC0D07F419171F0E17142A0E0704FEFDFD030405201D0AF70E110EEEF0FA0EF7E9F204F6E4EE03011203F80BFBF7EFF9F3FCECF51F10FDF8040C09FCFFFFF5F5ED080F1101FDFC080A0D0AF806041113F8FBFF04EFFE04001519F70CF81401FAFC09F90AFCFCF1FF0BF808FA0D080706F9F9FDF5F2F504FB0407FCF805F601FE05F709FBFA0DF704FBF7FA03F3080A0909F9FE0B0902F806F708F8F40C0BF50D07F906F9F9F40409F4F5FF00F7F50B00EDEFEBF3F206020C0BFB0504E9D6BBBDD0DDEFFBF50CFB07F1E1D9B59DB5ACCBF50CFDF6FDE6E4CED4C1C9E0C7D0F0080009F1EAECE6DAD9CDEAF9EDF7FF0CF3E6FE11FC1018E0E51E06FFFEF50917090502FF040BE4F3F801FB08FE08FA0BF3F5E7F2030DFA0FF2F300FB0E1A06DEF903061415F7F8010D05EFFDE2E6DC14161A1314F50AFAFF00F5F8F605070C0C0B03FEF802F8F8EA07FCFC0402EEF80000F708F5DAE7C9C5D6E3C6C4B0CFCCECFDE8F6D3D2DBEDF3F8EF0D0F1EFBFFD108F41C150F0D0804120BFEF5FA07FC1A192A260D021404110817F9EBF41B2D2914FE030F0702E2F7FFFBED102C2B23FA0A0F09FED6D50300E11211111010201700FCE8F505F6EB040F16051307120509F7DDFCF6EFE8FFFA090BF30A09F903E007D9DAD9DAF0FF03F20706F8E5C7F4EECEC0BBE6FC000612040EE9D80AFFDFCDFA0F1919291A1800FCE20900F4010F181F172010F1F1FFEA0508F2FAE706F202FAEEC4CCFFF4FFFADFD3B6CECDD1B9C0B1BACFEDFDDAF1D9DAD9EAED08E8161B06F2F8D408060508FC0C1A0B021418F5F8ED100F3E3B4227170A10041D1204F3FA1B412E36311B200F04FD02FCFBE6212C373011262003F9E4D0080CE622261A1F0F21161011EBE8F5F2F10E18130E0406160403ECF408E9EDD003ED08EE05FD0D06FECE0EDFE4CCCEE7F80102EFFDFBDABA0DE9D0AECFEE040C0F04F9FEDFC8FDF3E0C10914231115150E0DF0CE0200E1EA23241D1819FEF209EAEEFF00E6EBE3F5E9F3F8E8B8D5E5F1F7F4FB04FBFDFBF3040BFB030EF7FAFFEBEAF60B02131D07F7F40C04FD06F0FF0AFF0413081A0B1511FD06E5EE00FAFC091B0E2B46322CFE08E0F3E4D3EBF70D182D3E2B3B0506EBEDDBE0F3F507F407061023090CEEDED8DEF7F50A04FCEF0013F1F6F4FDF9E1D6EAF2E9EEEAF2F001001C303222120104F4ECE0EDE6F81004171D3220211703F2EFF3E8FE0B080C2A33230B121C0803FDE4FA0B0014172E1D1B121104FD01F4F2F6F8E7EFFD273A332C240811F4010703030604F808010509F405070400FBF909F6F4030909FDF80BF807F4FD06F904FDFFFCFEFD0C05030AFC02050C03F109020AFD01F4FBFAF40DF8FB07F1E4FA1BFEFA00ED0209000709FCF6FF343227190AFBF403F50400F0ECF51B322B1E10F602040C0D0B01E305303D212A1509F8F6FB092F231A0D1E1B1A030AF70C0E0C0925343113261E0EF7FCFEFDF4FCFD07302B111C0D02FD0903F50302F1021415100501FF0C02F7010B08051004F60DF8FCF5F204FD0DF5F5060400FEF6F705F2FE04FE0203FCFA020AFEF2F50BFF00FF0E01F504F4FA06F5F6F60FFA04FBFCFB06F6FBF9FCF7FFF4F9F408FBF906FC04F90DF202010B1A150A050608F90303EEEFEDED1033353A1C17FB070A03E5E2D3DCFC1F37380C0A07FA0109E4DCE0E9F6FC06010916040C0308FA03ECEEFEF7F1EBFA060E07FC1314FC0C1B0DE6DCEDFE0108FE050CFC05171C03E3EEEDECF6F90BFD0C0AFA021808FEE5F6FEFAF7F5080F07FDFBFE071302070204F5F5F4FB00EDF20DFA09FEFDF2040EFBF5F602FAFAF70BFEF5FBFA06090DFFF80806FD06F50BFD040507050606E2C8EDDDE2D6EEE0E0EFFA00F0D4E1C8E5DEB4BEFA0105E4F0F8E6BFE7DEFCF2F2F4F8ECF8020AF1FBB8F203FF10F709020200FF1912E0B8CBF8080BF9151F181CFD0619DFD3E4F20C0803242E321D171F22DDCAF81E12FDFC1B1E13FDF60D1EE0CFFF24130D08160BF6F6F9DCEABF0F0E0F21262103F603E8EAFCFAF80F1A1F1D0FF1FDF3FC06F610DDC2F8FF031213FE09FEFF06FE0FF0D0EBFCFE0E0E08020703FF0E0FFCFEEE040014251F0E1500FAEF100503E4CAB2DD08F800F6F9E8F92D0404090505F407F5F9FCFE0703030E05F5E6DDFDF1F9FB18ED050DEE0911D704E6FDE9D9EAEAFB151AF6FBFBCBF0F10A05EBFAF0F8F90B2306EFDAFF01101CF5050B14251C1714DCE9EBF81515070C140F1C133614EDE2E9FD10FF0D130C0B020018FAEBE0EA09110F16081202FAECDC03E3F1F7FAF5FCFAEA00F9EAF9F0FAFF0519020303EDF1E304EFF4F7F40A05040E0808FDE7F4F2F303F804D2F5FE0C22151E04F503F4170FFCEF040A081C0A0E0703FDEEFF0605F9F1E1E5F50A16131709011C2C0701F3E9C2CBDAD2B1F910ECDAD2F4E80BD1C2CEDCF7F3011E05EB0615CEE3C2C9F3E9D7F902010AFC0D1A01B1DFE4EBD9F6EAF1F3F90E2503C29CF0EEF7FA03E7EDEAE1FC202CDFE8ECE5F5FDF9F7E0EBCF053519D1CAE3EEECF6F2EDEADCC0E61E19C9E9DCDDEF070FFAF1E6E6F2E8FBC9E4EFF8EEFA0D03E2ECF515F3E8F5FC17F4F10700F8F61308F8EDD6F3F3141707FCFD1907140E0CF5C7C502DDFD0D13121F200F072FFDEBE0EF0019FD150B0A040004F8D50803F0D9D6F711FC09080BE8191DF0F502F1F100F9F1080900070606FE0AF703ECE807F4E2EE221707F804F401F0D7E2F8FB171A2D252A0DFE07EFD5C3C8E2EB022A3740261A10F4BAD0C9DAD7EBF4233127251B10F9D7CFDAE4EC070A10ED09132B0FF2F4FEFEF805FA15EED7BAD7EB12ED03291B01001406DABEC7CFF9FBE4001FFA041202E8D7D8E50105F5F40E2614F70400FAF5E2F3F2F6E3FF091D11110EF00401010811EEFEEDFE17FEFF090A0E010503000A07EC1BFBFE2401161E160814061BFCFD02E6ECE41609010700090BEC0BF408F2F1CCEBD0C2F207F7BCDCE000EAF1DCBCF5F7E4180A0AFFE610F4F3CFE5FB03EFE5071918FCFF0F06D6CCF8F2EE04E8E8F8F8F61004E0C2DDE6F4F3E9C9B6A7ABBAFC13D7A3DFF3EFF2E8CE92818C930217E6D2C5C4DAE9E6C2AC96AEAACD10ECBAD4BFADDCE4CDBAD7CFD802F8FBBDD0C2B2D3E5DFDDE7EEF405DE080CFECBD3E1D8ECF40300060B0AF1EEF0D0E8E7F10404100F140DFCE3C903FDF7F50EFE0B1224181904F30AE8D6E9FDF6110C21191F19EFFB0AAFE7D1F210E802E51004F1F405F9F403F4070CF8FBF6010C0D0A09F602F5FFF90E00070C0403FDFAF5F6FFFBE9F2E7F310211C0E07FEFA08FFF5D8F7F6F6F80E0CF9F9FCF4050BFF02ED02F7E7E9F1EDFD090800FBE9DDEAFCEADBE5CEEFE4FEFEFF0EECEEE2FF04E3CED7DCFD0C0A061B00FBF41207E7E2F1FCF8020D0009F4ED070AF6FFF6F907FCFFFBFE07E9D7D3E7EDF20A080710FC0C030A04E8DCE4FAFA04F90E0616090602F9ECF8EB0801060A090801FCFC0D0AFE0801FE02FA0E04010EFBFEF9F7090508020CFF04FC090B09FDF507060E0CF907F8FBFDFCF5FF08FCF60C080203F7F6080A0AFAFEFBF7F0E7F3F0F2020C0A1401FD0C08E5DCD6DDEE102013240AF70102EDF9E9DEEEFA35363C2109FC00FEF1F7EE040A133D5462381AEF0A0AFBF6FC051B274F56533B171402FEF80E272D2B192B363D2110FCFFFA0A1D26462C141B20070806F7FAFF040E0F392D231709FCF1F7F00FFD061A0C1DFBF6E0E9D2D0EF03F50AFE0E101F09E9DFE2D3050C12FCF50E0F03110B01EADBFAEAF917030708FAFE030C0300FF0708100D040706FFADDDCDBFC1F913F9D7D9F500E8CED5CEF7FBF90602F7F8FF1109FDC7F7F7FDF1EFEDF6F8E4F70AF6FFC0F9F205F2EBE6DFECECF908FECDEC121B1B0EF1CADFCBCAFF1801E0062221190C0902FCE6C5DE1AF8E3FA0F0B14091503FA09FCD701F4E40F01F5FBEB0A0EFF090F03DA03E00F05FEF2E8EC0310070E1DE709150D13FAEF04F2F8020012170300F5FF02FBF6FAFCFD0CF3080F0D06040204EDEAE0EDDBE3F2E6FCF0FDF2FEF9E5EFF2E6CFD1E3F2FC11FBFDE6DDC9BDD3E3F0F1F3CA1AEB08F4F1BDD9DCC3C8F017F2C5D4F803E3D0E0C4F9F9FBFB1613F7EFFDF6F3B7EFE2FFE8F2FD01F7E4F0120002BBEC0DFDF8E8E3D8D6D70A060BD3EC171F1D16DBB5C1B5B1F00A0EE6103127251B03E6EAD3B2DB1AF9E2EEF4F4040D18F60801D1D0F3F5DBFCF8EEF603020A0CFC00FBE8FFDB06F6E3DCF301FF0E03030DEB02FB1006F2F2F3EDF8FD01FE190C0AEF04F6F9E6F0F801FAFE1324F80D070202F6F5D7F5F6E6F40911FD05EDFDE5CADFE1D6DDDAE9E8F8FEF8F7F9CAB5C4D3DBEDE8EBD515F003010803FF1B220C110F1C2700030CF910001E19110911060B16F8FA09010AF0EBE5EFFC0EF8F5FA0A0DF406EAE8F2EDF1EFE4DCF0EADAFBFFF7D7EEF9F8040E100E0E0201FAF8F3ECF603090B3133260E14FD04F6E0F0F2FAF2F82F371A1305FB04FBF5F5EBEFEAF53E200D0602E5FFF801E1DFDFDBE4050E0607F8F6FD07F7DCBCD9EBE4E4000002F3F9F2F2F7E0C5D4D3EAFF111F1BF3070403F4F7EEECDCED0F0914FDF3F2050AFD00F403F805FD06FEF907F603F706FBFA000EFE09FAF907F502FA02F8F9010BF703FF0C040FFB08F7FE080C020FF002FAFCF4F1FCFEF7FDF30100F9E4F8FEFCFCEDF80BF70A05FAFAF4F2DD011112150BF9FE05F7F7F5F8F1EF191D1D2403120A0B070204FBFEE50D2A30130E04F90A0601E6EBF7FA04342A0DFFF407F90708E9D9DBE3F2140DF40200F304FA06EDE7CDD5E6FCE4FAFFFCFCF8F60AF2EADFE4E6D9EFFB0604000D04FBFFE4CFF8DCF3F2F6F4F5F7FA0002060FF8F8FAFCFCF3FEF7FD080A00020310F901F7FE02060DFA050C01F5FAF4020806F7FE0A0B000305060000F9FF05F7F2040000080CF5FCFEFB03FDF20507F500060600F7F501F20605FEF9F5FFF2FE050800F803FE09120E160F200E030B0A0CFAF500120E14272C1D1A07F908FC0A02EE03EB0A261811F8F3FBF70EFE04F1EAE6130EF2EDE1F5040D031102ECD7E1FEE2F2F2FC0901040D03FCDDD6DEE7F7FEFEFE06FB0A0E08F8DDC1DFD41021FD0CF80701F50EFFE6E1D3FC0C140508040D02F4F4F9050D0BFF0B0202F7000CFBFDFFF907F505FDF5FC0E0808FE0605FCFCFAF9FA070705F308FEFBFBFB103022250EF00F271F030308F720212B20FA0BFA03010630051407EEEC08DDD2DCEAECFE061900FDE9DDDFE0CBC2C7E9F7FA0B111A0102CCD7DEE5C4D7DEFF070C0EF5EEDBBABFE0D9C6C6DFF40808F5D8D7FCB1DCE5E7D7DDF2050B0E1B08DFF0A7DDE2F8F5F10418170C120AE9E3D3EE00F703F7FC1A1908FD15E7F7E3E6FE0627130B0B0900070B0AD6C4DDF6032220270D19FEF208F2FDCD9FBEF50E132012F6FDE9DEF8FDF6CDBCC3DBF5F504FAF0DED4EE0BF1F5D9D5C4E8C2D7DCD6DFF404070EF6F80B0E090B08FC0E0CF603EBF8121D1F0D25FE05291D0EF8FE03F7FF15FAF9EDF0E7FFF9FF0F0711F5E8FFEBE7D3D3EEF3F9F90812F7FBE300EED4DFE4E5FF08FE0A05F8E4FC0BF3D5DCCFE7F80BEDA400FCF50806FBF2E8EC0206111BEBF4ECD009FB12F4F617191415110501F9C2FBFD0B14F019130F0301FFF5F7CEFD080A15FFFE0303FA07FEF6F3D6EDF408150D111C07FF000C05F0DFD1ECF406111B140A08FCD8F506E9BBDBF4F001FC01FD06DDCEFC0BFEDCD2CED0D8CABCCADBD4E1F2F406252D4611331D1B24253B05E813DF06201F301613000A1015F6F2F1E1EE0605EE08091C0908020B10FAE9DCFC0309F6030B0FF6FAE5CFE9F4DDFD0503F1F4F000FBF3F5D3E5BEDAF7FFFEFCF7F5EBFAF7DCC7DBE3FA01F7FCFF0801EDEE2905E1DFBEE50308FCF206100A1C1709D2EDB9E1F201F10E140B10241403D4EABFD7FA0611FB111A0A0903FC00C8E3E6ECF31A180E16050A0908FBE9CAA0FE090815FCFD10EEEBE3ECF3E1D1C4C8F0F50701E301D9C6E104EDE0D6D2D5E1C4C5C9CBDBEFF1FF10F90401F9FEFB01FDFB0F00F700FFF7F4EB081D1A1B121D1C1205F6E802E6E9F0EEF90D0A040E02FAF3E6EFE5E5E301F70D29150A040EE4F2DAD0E6DAF71C17101400EEE2EBE7B7E2D7D7E7160400F7C6C4EEE4FDD9EDD3D0FE111D05DEEDFCE8F4FDD4D6C9D0051817FAFA07F1E6F7E7EBCFC2D7E70914100A0304F8E1DCF5E6E3DDEF02171F0BFE090DF703FDF5F90A091320070909070AFCF2D2F601101301FE120CFCE8ED0701CBE3F5E9E7EBEF0FFED5E2EFF3EAF1E9E7DBCFBECDD9F5DBF30B030B240E271A2E241410272B11F3F5F701213C272D322C21111D36F6F5F902171A2B180E10131302FD12FCE311071B20241810ECE7E5F3E0FDE8F8022012161DFBD1D4CCC7D0EFBCE70C161B191CF5D9C4CA11FFFBCCD52A091A34080AE5E5FE21FFDBC6E90A22252D1E09F7F8090EF80BD7D9041623190B0E1D1B1415F3F9EED9F6F4FD19042311F710FAFBF3D2D2A1F1F60313040A030A0AE600D2C7DEDEE3D7E601EDFEE7C80FF3CDC0CCF4CEE3D3E8FBD8BCDCFA06F3DCCBD9CCD8CBCEDBCFEEF4F301070C0900F5F6010209FF0EFB09F5F7F102070A0A30090BFF000DFEF4FCF4080D1B190A0A010CF4FDF8F4FAFD0A0B0E171A11FFFCF2F50102F3010A0608091CFFE2EDF1000101FAFD05F8EA031E04E8DCE1E80AF8F9EF03F9F20A04F6D9F2F2FEFBFA00EFFFFDF6190903FB0DFB02FD06FEFD1600FA0BF6020110FD0D0D0503040A01F3F8EF0B180F0BF6FB050B00040115080F07FA0D1007FD0AF8FB090311FB06FE010105EE08FBF8FAF1F6FAF2F9FBF20904F2F402F6FDF7080602FCF2F90BFD0405F80AFFF90AF8F508F90502FBFD0C07FB0DFD05EBECE9F000F806070AF90B00FBF0CBBCC0BCE0EBFCF3FAFE0104FBDDD9BDCAE0FF020A0D09F40BEDE6BDB3C0CF0B323C2C0504F8F4E2EDB28BC3D1113A35F7EFFB05F4FEE6B480C7E5112326F7EE000CF5FFDEB58CC502EA04EDF9FB0801F2F6F3CAB8E30203FEF3E9EAFF03F3E90800E4E30716F100FC06FF040808FE0B1E1407EEED0112FFFF02FDF30F202A26160203FAE906F5FE00E4FC000BFA0BF7130BEF0605FD070CF7FC03F7EEF700F7FB0002F8FA120D2F0B20230F0E3136FBEB0CEC13061114020A040A1B131FF1FDE50A020A0EF4F6ECEFFAFF210D06ED010EFF02EAC5D2D4E4F1DC05FCDE010D07F80BF0C9BEDCF1E8CCFBED100D0B0BEF04E5EDF20411EF09EF0716FDFCFCF4090601151EFA03E0D2210A041E0E14FE1410191809E3F41C0D04211B241E12090E1CFCF4F11318121811150D130BFA130FEAFDE508151E090104FBEDE70AFF07D7D806FFFFF9EDD1E4F0E3EDFDF4F9E8D5F5F0CCE6E0DADFCBE101FF05F7D8D3DDD2C3CFD2D2E4EEFB080E2A301623221D232337FDFBFFEF172218211B1C070A10221CFBFFEDFF1E141AF3F0FBF0F4061305FBE7FE1A0C10F6DCDAC9DFDFF4FF06E60E1D1A0E13F0C4B8D7E9D6CEF5DC161F240305F3CAC3DAEA0EE30CDC081B120A09F0F2EFFA0D1B000EE2CE2F1017231406FC0F1A07220DECF81E1A0E2413120E0A0D052BFFDFEE1D16230412080E1201102207DBE9E909161B10F9EFFAECF6F3FBF7CDBFF701ECF6E7EAEBF2D4E309F8EFE9CAD2EEDAEBD9E5DCCFD90005F7EDC3DDEBD7CDD4DEE8E8F9F8050AF8FF060AFE02080E080509F8FFFBF5E5DFEAE6E6CA04FA10FEFB050207070B0B00FBEDEEFCE904110A13060D1B1D131B0C150F0007061022191201060C1E12101AFCFD0D212012FBDFC4EA11FAFDFBEE15071D16EEDFF7D2F2F802130B03160007FE041B18F8F60C362103E9F711F1E8E92D08FF03041F19030801FDF2F600F6E201DDDF010E080D0002F803FFFEF8E8E1D5D4F4030AF80A02150DFBEED5CFB6A5EBF60B0E0B16F5F60BE3E8CAC6DFF610FC06FD1010020B0407FCF9FD0DFCFE06FB000B0308080502F911FE020E01FC0103FCF900FB070EFA04FA0F0406080402140A080B091903130F01FBFC0B1311FE0DF6F6060E00FBFB1202FD0009061601F40F0B06120E0611F809101315F9D4F4F6FD1000FC08000B181E1DEFD4F1FE03FEFE0D0601FF282F1309EAE10E0A0B1108FC01000F0E1A12FCF90400FE100D0FFF101218181E0BF50D11FCF8040CFF0F0D0113F80FFC130C110113070905FA150AFF0300FAFD02FE0BFE0AF500090F0A0BFC11FF0B03FA100314F80607FA080001FA05FD0F0213130EFBFE0EFF0802FEF90E02FB0B120504000EFFFF0C040110FA0F080E030B0D020C0204FF10FD05080808EE06070604FF060304070F0BEFF7E7F20F04E2EFF70EFFFB0EF7E906F417120BF8EEFE010E0D120D06FA24342523FEF6FBFD090E0E16131D374A2202F610F9F50CFF00FD0F2D371B0AEAF51310F4F6FF03040E10191E07EEF6081AFDFBFE14090415250404FBFDF81303FC0D0804FA130E0605E3F5FA110C0705FA02060B090AF7FA0805FD0510FF11FA0B0E1217FD0F070DFC0F0601F8F8F0D2DDCAE2DCF4DAE7EBFB0A05EACDA5B7CEBCD1C4C4CFE3DEF402D8151CFF1407E7F1E4E3C0D6F0120E3716271B0A0BF7F1DFE5B7CE272C192F32160B0309F9E2DFEACF25051F1D1108F40700F3F707F1EE392416FFFEE9E2E8EFFB0901E3ED1913FADBDCD8BCE2F41404EFDBE3E501E1DFE6D3D3E6F71110F6F4C619DBFBD5E1DAD6F3081007FAF5F6D8D5D8DBD6DBDFF7E1EAFAC7D5CDDAF3F4D5D7DBEAE8FDE1E6D1C1F200181E10EEEAF50AF6ECE8D6BAF100D90AFB1CFC140514132009D60301F9050B100B0B050D0A0B1001F901F4D6C1A7E9B494A7A904DAFC0E03FCFDF4F804E3CFDBD0E8ADDAFA21F6283810271005F6F5E2DADEFA200E0C051103080E05F9DEDCDEFE1522131814080D1D12F5F8E700051217120503F7E903FFFD0601EF12172A15FFF4D9D7ED0B1502EEF406FA08E7FBE5D7E2DD081F06FCD6FDF6F4E8DDE5F203F20008FEF2F40206FCECE6EAE8FBE4E7ECEFE8EAF8E902FCE4E5E3E5F6F3EDE3DBD012ED191B07EAD6F8F8E2CEE2C9C8F9F2301201061304F90F07F8F3FE040C05F6EAE1CBD2DECCE2C7E0EEF402E3EDB5919AB7D9CD80C7F0CAE5F1FC0309EBDDE9F9EDFEE4FCC7AF27F1EE0C0DF3ECE7FAEDF3E1FDB7260506FF0BFDE0E0F0FB1512E1F3181E190409F2D9DAFD18F8F4F206132B1C04EBF2DCF600FD18E80305352107E909E6D6EF0710F2EDECE2E711E7E8E3E4EFEE090A0B0CE8E2150BE5FBEEDBF8F0F1F502E6EDD4D6DBFEE5F2F907F4F1F6EDDCCAEAD3F90209E8F4F3F9D9CBCCDFCAC9EC2114060900F9FFFAFFF0F2B9DAFAF1050D170210FB03F81107E90D07060E1512121211061014FB0A0809EFEAE4F1E7F0D6D6D2D1DFE4F0F6FFF5FCF503FFF2EAEDD6D8BFD9FE0009000A030D0301EBF2F4DFDF1D0EEE050F03FE0A0CEDF301F2F50E03050308060BF419F31401E5F9122115192429E4CE0C0C0BFEFB0F1419131B2D0EC2C4F80C110F0DF30102080D27FACACCF91110F700F50BFA1C0C01F2DFF7FE092514FF000FFDFDE6F3EFE7DAE8E1F5E6F1F7FAEFF4F0F3E3E4E5E7E9E7F4F3FBECFE1A03FEF4ED04F6E0EEE8D0FCF317F0000E0DF40E00050D1C0C0701F7F501DAC9D8E8E6EBE5E1E10201F9F3B4BCB5A4C2C69888FDCDEEFA08EADAC5CCE0D3F5E2E0D6BFCDF6F7E8D1D9D2E1D9F3110DFDFAD92EEADCD9B7C9D4DC0D16011EEEE72E18F4E0C5D3D4DF16190C13CFE51B170AFFEB07C7F2101415F5C5EC203A19152425D5000716FF160CAB0213032A3D1AE7020E0B14FFEBCC04D30AF800171513040216EFC8DCF703FC031D141C03F9FFF2C1D4E9E2C905432B150D07FBF8D9D8C3D705DC2B2F1B1A150F0B040B00E4F90914130E201C120B2B010A28F70110020D0DFD0F0D0F000605F9100310FCFE0D0405F80B0CFD0B100210FC0EF9EEFAF4FAFFFC04F6090BF90701F9F0FAE6EBEEEE02011409F6010EF2E0E8ECF8E8DF05F1FEFD04FDF5F9F3FA1509060E030D0DF9FDFD05EE061627230B13FC090905FD0C100C10242F05F3FA01051AFCFEFB04FD193C1BF6E0FE110412FFF6FD030410201DF60A0002FC09F31107FDFF100B0A070600FB00FFF5FC100FF20007FE060A01040207F50211FA04030C0201FEF50B04FA06F7FCFE000016020E07060403010EF8FC0BFB12FAFEFC110EFE020E010CF70DFE000EFC0712FC0E0DF803FA00070901090D0F140F181702F910FCFB1A1F21282E26FBEF1104070F06F20F2A31271907F1C8D7FBFDFF02041022240100F5DDC3D00100130F1DF80F16EBFF1504E5E8090D0A15150CFD11EBACFA0E14EF0A1C0BFE0801070CE0C6D0F1F8F2F6FE07F70F06F5FEEDDFBEE9FDEB0B05FE030B0500F1C7D2CEEEFAF8FE0C0E0907F6E0D7D3CA0100F6FEFC0C09FA150EF0E7E1EAF80FE8F9F50902110FFF06F8FBF705F50D0311FBF8060502E6E4CECCDBCEE4CCD2E5EE15F3E7AC9297D2DCDB9CDBF1CDE21328F7FB08FA0CF305F6F5DAB1BA071A1C252933160D0306FF08F7C8FBFE1729211709E9060CFEFFEEEF1004F105F7FFF5E7F8F90100E2C0130DEEECD1EFEDF1040AFA09EDE00EF0D2D5E7D2EBDFF60F101004BF03F0D2D5F6ECECF8FE1312FFF4DF0AFBDCE6F8F2F8F0F900F7EBE3BF0CEAD9D1E5E2000405FCF2DEC7D505DFECCBE1100B0AFEFB06F3AFE2FF0004FB12071F141D040204CCE419001EFE170104221EFD1019000213F302F0D3CFD7DDD8D6CBCFF2FD13F0DBB79294D7E0D185ECE5BFE90929FDFA0BFCFCF700E5DFD89FBA0D2C1524231B0DF9EE09FEF2E8D10509021D101CF3ED02020C0BFCD90C03F5EDD9DFE7F1020807FFECC81705E0D9D1E3F8ED1005F8FDDCCF02F6DFE0D8E4FBF0F60B1218F0BE06E4E8E0FEF9DBF9F81609FEF0D70F12E7F0F7F1FE07FAF8F4E5C8D205F9CEDBE4FA0606000101DFCADE07CBD2FA09132911151300EDB1E908E80E1F31172B25180C1009B5E20CFF100B0819072910FA1817EDF90501FAF3FDF9E9E7F8EFFCF403F1F6F2F20904F70202F5EAF5F8EFFBFBF60311090B0B14FC06F9F810F4F904F00505FB0B110803FF050A07EE01E50CFF0B0A06F5031101FDFA00F6F9FCECDFF2E315222415F704F003E8EDE6E5E2BD051C20EFCBF3F1F00EF8FA08EAE703F7DA0101FFFBECEFEEFC0103D9EEEAE4F8EEF1F1D9E1EEF8DFE8CCF1E4DCFBD5EEF5EEF5F0E0D6FCF2F7F1EDDEE904EFEDF8CCEBF6F5141E08F0DEFF070603E7F1D6FBE8000801E3EFEF0501F0F5F6FEF3EDFFFCFFEBF9FBE7F6F0EEEFEF00F1ECFFEAEEF5FAF0E9E8F6F7FEF9EF0806EF03F5F501EBFCF8F4FAF9EEEDEDEEF004F5F603EDFEE9F002F1D1EBE4FAF9ECECE9F6EFE4E9F3F5E4D2DBF0F3EFFD01E8F8F6D9E3E4D8D8D4E4E4F9FAEBF8F2F6DCF2E0B1D2F9F1E8E6EAF4F1F9EEE3C2B9D3ED01F704F6EDF303F9F0C9A8BDCCEB0608FD00F9EBF4E7D4D3B7BACCE7F9E9EDF8FAF5FFEFDDCCB0BFB9E0EBF4FDEDEDFD01F2E8E8DDDFD3F6F6F1F3F2FCFC02EFFD00E6E9F6E302EBF2F1F9FCEFE8F9E8FEF3F8ECE8F6EAF80200EAEFEBF8EB00EDE9F9FEEAE9E9EEF70000EEFDF5F8EFF301EEFAFBE802F9F7F9FF0902FFF7F0FF05FAFBE8F4F7FAFDFBF2E2F0F4EDEAF400EAF7FAE4C7E0E3F016EFF3EBE7FCFAE5EEC6CECFDC062600F4ECEEFAF9E8E9CBC7B2D516181C0904FC02E8EDE3CDD9CDE805180209E600F703F9EDF5F0CDCF00F5EBE9EBFEF5ECFBF1FBE5CCE6FADAF3E0FCFCF7FEF8E5E8E3F0FA07EFF4F60000F8E9F0F5EAF0141CFDFFF903EBF6FFFDFAF6E8F4FCFFFEF1F0F4F4F801FDF2EAE5FBF1FAF3FFFEF901E8FDFFEFD5DBE1E8C6DAD9D4FF01FEF4DDE1B88BCBD0FA0D010CE2E3F1E9E5D307D20C0820111815F806F0C5FDD4E3EDE7F61A121A1D1207F2E1000C0A111A3013092015020C02E20CF8161F433F1407E8040F1105DC0C091E403E3B15040E0E2213FBD1D90A02210B35160F1D181D17E6E5FEF2EBF00510122E1F100CDDDFE1E0D4D2E5E926141703EF0203B8ABD6F4F6030105150CF3FB08FACCE4E5F50F13180E09FCF7050FD9BF0BC1F5E6FA071107EAFA1AFEE8DDFED9D2E4DEE1EFE6EBFED8A6C4E1F4EBF4FFF7FBF1EBE7FDF3FEECFFF0E7F4F9FEEEE806F404F8F116FDEE03F20A07110A16250D0621F4EDDA040C03F509060D1713031919F4EB04FF0806151DF9150F1011EF00DB0CFA0EF9263C180C0E192B0905E7F00B161D1E2A14EE021809F8F5EFE804FF092115FE170E051707F2DCDAF7F10811110A140D1D12E0EDD0E2F1F3FA1022101602EBF5EFFEDEF0F7EBF4081D03F804F9FDFDF0DFDB010DFC070016FCFBF4ECDEFFEEF2F1030000031509FE131501F3FED4DDF8EE0707FD06FBDCC3E6F80A06FEDCCAC4B4B7C6DED3C0DDD6F7D0D2E301F60AEE0CF1F0F2E401EBB8E1F90705242C130C0BFC1EEAD3F1F1120B121C1D120D0BFF0704C0ED140C1513150919160D0A15E4DE010E0E04F80618161F2C2A1713C502F209152F13190B1A2023000BC4E4F51E131F2F181F0B0EFC0BF5D3DB0F001B182112FFE201EBF2C4E3E0F716142009FAFCFC01EFEAE8AED703F8FEFEF8FFFD100406EBC3BBF9FEF3F00D10201BFE03E8E6B3FDCDE8E709FC0C1C0F07040007E20AE8C6E7D6F9F6FB1001ECC2CFF2E9F50001EDFAF9FCF0FEF703ECEB05F0DEF5D6CDF40E04FCC0DE01F9EDEDCBD1062C231F1A1307F4F103E2F8F9051C10061C1106FCFEFCF3E5FFEDFFF9FF100C160C19FF0A04DDDEEAEDF9F5E9FD24281F1E11FEDF150AFDEEE0D4032D39241D09F6DDF70E06F50BEE0B1C180B00EAEED8EE1709190404FE0003EABBE9F0D7EAEA05051001FDF3EAD4F103E3E7E0E8E3E8FAFC0B02FCFFF8EDD5E1E5F9EDF9F7120D15000201E8EFEE09E3E1E9010200FDFC09F7E7E4EAED01F2F5E6EDF0E2FDCED3F203F8F405ECC0C1CBBDB6F7D7CBECDB04FAF3D2F1EAECE0F4F8C3FA04FB03EDD0F013FFFCFE170E07FEF4FAF5B804FD2515031318F90BF11303CFE805212105040B09020A191DFBDFE00D0607EBDD16332824190FF7E101FBD2D0D8FD1D2F37291D09F2E1E2DEDEFE1F2E25F8FFEFEEF5E1F7FEE13844443C07DBE0D8E20E9AF0A6FD3839362FFFE5FD061B16BEE5A2F23E1819190415071818EDC6F99A06EAE8F817252C141B23F5E105DBF6BBD9D9F005341E0BE7C2DA08EACCF1EEF4DBD9C4E78EBDF701F1ECEFF8F6FFE9F3FEF0F0FAE9FAFD02F7F1FA01F4FEF9F0FA00F8F7FCF1F5F707F8FCF90102EB03E3ECF8EEF3EFFF0206FE050604FEF5FFEDF1FBF2FBF7EB02031117F60500FEF1EFEFEEECDAF515171B05FD01F0F0FF03E4E6D8EA07FFFF03FAEEF2ECF9F101F9DE0A15F3EDE6EF02ECF7F9F60B15FA19FDFBF9E803FBFBF1F31E1C2710120E0EF5FA0BF4F8EBE4F0F514FF1B09060CFB01F2F3F407ECEFFB15FCF8FEF1050AE7FBF7EF0AE110F711FDF6F6ECF5EDFFF701F1F1F5EBF4F2F2F0F0ECF9E6F3EBFAF4F8E9F6EDE9E6EAEAFBF301F0EDFAF6F4EF00F5FAF802FF00F901FDE6F60EFBFBFBFCF5F0EEF5F4FEF6F301090CFB070B10EAFCFBFEEBF8F5040B091404F9E8EDF5FFE3F4F708181E3001F403F8FBE0F90BF608171212EEEFEFEFE9F2F902FA05F7F7FCD8030B080E0AF0FFEFEC08ECCDCCDD0D383C25F9F7E902F5EFCFAFCDF81F25FCF7F9E6F4F5ECF4DAEDF7251606F4F8EEF2F7FBF4FFFF0323290CF501E7E5F3FBF304F206FB030FFCEDF5FCFFEBEBFFE6FCF3FBECED03EDE2F7E8F3EDECF802BDC9D4C2B8DDECD9D1EEEBF9F1D9E30C14F60202EBE6F5060FFDD0E7F1F0EEF80E00150200EFEFF6DDD1D90FE8EF0F070BFB080CF403DAE9FFFF1016160B010CFF1C13F7E8181A1620252C0CF50DFA1717F9D80D2B29302C1E02F4DFDBEAF8FCE3D804F913301914FFFBEEF407FDDFEBF5CD010D0D291D0703F9FB02E0D408EFFD0C27200A0E0618CB04E1ED25202014190C0B03140DB0FAE3EF1636251B1302F601000CCCF800DCF50B05EAE6F8F90EE201E1EA02E7D1EBD5C9DCD9E3D6CFBBF4F609F4CBD4CCC4A4CEE4C7C2F5DBE9F7D1E4F912F5F3EEF9EEF5F805FFD3D2E7EDE6EB0D090F0602F400EDD3E6DA09D702FD0D01110CFC0AE7D7FB0B0B021B130413091300FEF7E51831272228260FF00C01160FEACA0E281F323024EFEADFD9F602FFDBEDF4EF18181503F4F8EDFDF6FBE2DBFFE501170312100DFA08F6E8C7E2130910080C0B1B0B0214CAEDEAF82E2A141B1F1602061714B2FFE4E1223625131103EF0E0514CBEFE6DBFAF6E3EAEDFCEA12EC03CDF2F3E9C3DACAC6E3E0F7ECCBC0000BF70D04F804F7F9F70BFBF3FBF5FB0708F8F2FB01ECFDF0DFDDF0F709F3E7FF181515FE12050DF50106EEFBE6FDF5131C2723F4EDEAE804FEF9FEED12173C15EEF6E6C5ED09F0F21400F4021D101309EFF1EB030005F1E3EBD60D13FCECDAB7CEFBF4E6D8E4C4DF17FAD3D0CED7DB04F6FADED0D71216EEEEDBB5D0F0FC06DFF3FA02FD0509F3D3D809060C0CEAFB0620171B2002EFD6F6FFFAFDF7FE0609121806EF05F4EE09060B06131402EDDBE0ECEDE6EC02F8090807000304FFF4FDF0F20B03FDFE0BFBFE0604F8F202F5F5FAF2FA0207F3FB070203FAF7F3F5F10B02F5F8F6F4FF00FFFEFB0802F7F30CF1FE0105FDE8FA100003F70403F20BF403F9F6E4DFCAF9FF0D0E0309FFFF07F9DBBABED8F7E705F203FEFDF8F2FBDFD3C5DDF5DCEBF406F70CF50602E4E4E5CADAE1E5FE02F5F408FEEFF3F6F8F0E5F7F70D0BF4F70CF8FC121314FE080A020006F40AFF050D0E0A1309FFF7070DFD0AFEFE03010CFFF9E90BF4F50602F5F4F206F7F0F3EB04FBFD06030602F805F8FF0005F0080606F4FCF2FB0A01F101030BFAFDFA03F70BF4F5F109FEF2FFF6010505000A00F5FAF1FCF307F5FBFC08FE04FD06F909F8F600010319FADCFAEA09FEFAF405F7FFF8F6F7E9F0FBE50CF501FF00FE04EEE8CCE1ECE5DAE4E6F50B040BFAE2CFCDECDFCDDBF1FDF50709F6F6EBCACC1809E9E7F5FBFBFEF3FCFEDDDD052805F9EEF10C06090506F605F805211EF9E5EB05EE02FAFFF7FE09211700F1FAF3F20DFBF502010506F102F0F6E5EDF902F7F107FAFEF301F5F1F8FCF6F6F6F4F5FBF80F08FCFA05F7040A090A06000306F6F2D3E4D3E2D6D5EF08F7F0DAEED9E0C4CDD8E6ECC7DEF1F407E5C599A6CADBECEF02F1B6CEDCD4C1C3D5BEE61C241C362502ECDBE6DFE1C5F004162D15290303EBCFD6FFCFFCF91A2B2A162005F6F3ECCCF6071F05301414F5FDF1F4F3DBB808102014240A12F1E7F6EEDAC2C4ED200E241B1DECF6D8E8EAC1D0C3BAFA0D2027FFEEE8D4CCEABDCEBED30AFB05F4FCE8D5DEEFF50309CFD6F7EDFFFAECF3E5F6EAFF22F1F00509F3FBFAEEFD050A111311EB01262931120B0E1111021E10F3F905FAFBF8F5F3F705FFFDFB0B080000FEF3D3D8E5EFC9C3B1D0E3F8F3FCEDEAFAF3E202E8DDBFC7A1DAF8EFE4EEECF61945261403FCDDC008E4E904070D202F1715181607D4F6DCF0080D1807240D0F0C02ECD605E51109FE14202B280F12EEECF208E010F20A0508322A05E4F7E6D2F9E0F2F10B06191B14FFE1D1E4C7F4E0F1F2031C021F06E8ECDDDEE0F2EDE7ED11F310F7FDEFF7EAFC0507F0EAFB080DEBE2F6EEF4F0F41109FC0A090B05FCFC07FE07FD2913F5F70D0F0C070FF5FEFFFE0F05F2F4FC0704E2C8F2E0E8E5DBCEDAF7EEE6D2E4DCCABFEAF1E4F5E8B5DCDDF1D6B6C91217F9E3F712F2EEDBE3C8C3EA090E1D3E391BF2D7D3E1D3DDDB06120A2A282817FBEA06CBE7C4D613040F19152712F711F3D2C9CB070C0AFDFE0D36070B02DFD3FAD40EF9FB06FC1B0EF3FAE9D1ECCABFF40CF8151E130B10E7E3EFD1D8D6F1F6FB08FEF8F9ECEAF5E1EEEFA80102120AF70A01F5F6EAF7081AB8D8F80D0905F5DAE2DEF70916F1D5F7F7100109F7F0F70809FC21D5FB112A061E151B0A1E18181CF90BF9FAF3EF0802050102F804FDFDF6F5F8EFFBF9E9E5E9D8F6F4DFEFFCE7F5F5F1D6EE1813FDE3C2AAD5EEF8EFDAFF213B3E2D27F5DAE1C4FBD9E01414111D19171705F0E2DFE9EBD4F2F0FC111615FDF6F2E8FAF5E5F106E6DBF5184EE7E7F40003E6E2ECE2ECE5FE4624F5EFF8F7C6DCE8F7E8DEF61B452007E7D9F9C6F1F5E9F40114331F1DF1E1FEF6D4E7E4F0FE221C140DDFDAE1F0E211FEEBF2F70A09F4FAE9F6E7E20F2612F7FB1612FB03FEE101F41518FBF607FD172B2309190D06252000F9F0010D06FFD5EAF2E4DCE3CFECFCF203E1F5CBE2E0E5D3BCE3E8B1D8F1F3E4E2BBB2DD0EEBC0D6D6E0C5E4F3E0B3022614141A09E2D8DDD8D9E0CBFE32302D2C2600E9DCD6DBE2DBBF1A2F1F0D1410F8F5F90AFFE2E3F520040003F12407070D11EEC2CFD106EFDAD7E813FC08230FBAC503CDEBCBAABDDD080A09200AB6F608E3DEF29ED4EF0D06F4F5D0E80DFCDFF2FDE0EEFEF90BF5E6EA1F02F2CAF204060F00F8EFE1F9F117E901EF1B100C1A0CF1EBDDF91A01F708E83A0D19130B24153023FAFAF9FA08030AF90B0BF5FEFEF9F2FFF30703F80D0E05FAF605FC04F4F60C07FCFC000AE701F2F2EA0000F80BF40309F9040B05ECF2E4EE02F1F5070BF7FD1B1118001EF2EB01FDF906010A05FF01F4F001EAFDF9040C0006FBF205E4F0D3F5090B0205FDF40E09EBE3EA11EE0913030CF6FC0907FD04EBF103FF000F0C04FB05F702FE1306F9100C04F1FAF3F905FEFC0B050D01FBF0F5F8FDFD060E00F8FEF305F4F9FE05F9FAFEFDF7FEFEFBF70DF2FAFAF709F8FD0DF70AFC0B091208060C07060704FE07F4FCF203F0F70AF3F209F109FDF502F3F3080BFDFE01000D05F509010504F207F0FDFD0A0009FE0BF8F707FC05E5E6ED0D1314F71EF8F40001FCF8E8DCDEF0F70C1724090C00F3F0EAD9D6F4FFFE0022F50810F7F90103F4FC3B4A01D1DDCD0808FAF511FDF30E2D4806C7A5CCF90D02F1F4000515482402D8C6ECFC0A0202F2FE1E2F2013F1E4D8F2F10900EFFB0B071E20F7D5D30A06120603F0ED09FEF8D2D7F605FFF8070104F7F1F9FEE7E8E4F6F90EFF080D0BF70603060908021404151304F2FFF205F6D7F4DADBD7D7D1E0DDF3F4F5F5EFDCBEBFFCF5EAE4E2AECEE2FCE4D4CEE5E1F3F1FBF6F5E3DFCFE9CDAEC5B3B4DE06160406FDE8EC01CDAFBCE2FEEC0B101C060BF8E3F5D7FF051803FAED0A0F1B241E04F6E83927161EFFCC0005012015ECF6D036221F0AF6B302FAFA04F9B50AD907132D09D9D1E6F7F3FCDDC5FFD0E212F4E9D6EFFBFB01FEF50CFBC4E3020D08F3FDF0FCF3FB0D0404E6D7D4D6F2F806FF0B0F1813F0F2F6F9180F0C0B1E131E0B1B12EDFA0BFC14311F2F1118200D171213F101FADDF4E1E5E1E8CFDDDEE2F1F1F1DEDBCBB9FAEEDFEFD6B5CAE7F9E0C0BEF2D709EDFCFBF8E9DBD2F1CDA6ABB5AAE5FF0FF806FFE9E7FCC8C3C5E5E2FEF90E0F0CF8FCDFFCE0011A1F1808F7F410102217FAF5D642331C17FBB70810132801E9F2E6382B1613D5A3F6F9FE07F0B5F8E31320210BB0D1F4F70E04E9C5F3C3DF0FEFE5CAEAF9F40AFDFEF3EFD3C205F7EDE905FAF30501121901D5D4CAD3E90B1211FD0F1A0E00F1F3F20111F81D201417172111F007FDFF0E3B21241F1434181E020D\"\n", " }\n", " }\n", "#-}\n", From 6200c57ff4487eb14cc13a71507c53b844375bdc Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 30 Jun 2026 17:28:24 -0700 Subject: [PATCH 04/15] output --- docs/src/tutorials/mnist_quantization.ipynb | 124 +++++++++++--------- 1 file changed, 67 insertions(+), 57 deletions(-) diff --git a/docs/src/tutorials/mnist_quantization.ipynb b/docs/src/tutorials/mnist_quantization.ipynb index d1a0af0..5db4a1a 100644 --- a/docs/src/tutorials/mnist_quantization.ipynb +++ b/docs/src/tutorials/mnist_quantization.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 1, "id": "954e0f62", "metadata": { "execution": { @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 2, "id": "c56dc8ec", "metadata": {}, "outputs": [], @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 3, "id": "a55c2a50", "metadata": { "execution": { @@ -108,10 +108,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 28, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -126,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 4, "id": "978adffb", "metadata": { "execution": { @@ -157,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 5, "id": "e0b7cfe7", "metadata": { "execution": { @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 6, "id": "8671c764", "metadata": { "execution": { @@ -249,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 7, "id": "f48fdf9b", "metadata": { "execution": { @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 8, "id": "878f7025", "metadata": { "execution": { @@ -326,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 9, "id": "35dbf869", "metadata": { "execution": { @@ -355,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 10, "id": "3bbae265", "metadata": { "execution": { @@ -411,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 11, "id": "91c17bb8", "metadata": { "execution": { @@ -454,7 +454,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 12, "id": "fcb3fd97", "metadata": { "execution": { @@ -496,7 +496,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 13, "id": "7434e08f", "metadata": { "execution": { @@ -506,7 +506,17 @@ "shell.execute_reply": "2026-06-02T20:31:32.431486Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "W0630 17:26:54.494000 52887 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", + "scikit-learn version 1.9.0 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.\n", + "Torch version 2.11.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.7.0 is the most recent version that has been tested.\n" + ] + } + ], "source": [ "from coreai_opt.quantization import (\n", " ModuleQuantizerConfig,\n", @@ -528,7 +538,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 14, "id": "0218c7aa", "metadata": { "execution": { @@ -559,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 15, "id": "a3ac9f18", "metadata": {}, "outputs": [], @@ -602,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 16, "id": "d1fd4ba2", "metadata": { "execution": { @@ -622,7 +632,7 @@ " (no submodules carry externalize markers)\n", "Ext_ns: \n", "\n", - " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n", + " torch.ops.coreai_torch_ext ops: ['name']\n", "\n", "========== AFTER ==========\n", "\n", @@ -631,7 +641,7 @@ " _externalize_op_name = 'model_4_norm'\n", " _externalize_config = ExternalizeSpec(target_class=, composite_op_name='rms_norm', composite_attrs=['axes', 'eps'])\n", " _original_forward = \n", - " forward = .patched_forward at 0x1393e6e80>\n", + " forward = .patched_forward at 0x126bd9800>\n", " forward.__name__= patched_forward\n", " forward.__module__=coreai_torch.externalize\n", "Ext_ns: \n", @@ -707,7 +717,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 17, "id": "db4e1e88", "metadata": { "execution": { @@ -759,7 +769,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 18, "id": "ad3be560", "metadata": { "execution": { @@ -787,7 +797,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 19, "id": "14a00586", "metadata": { "execution": { @@ -857,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 20, "id": "cab3a185", "metadata": { "execution": { @@ -892,7 +902,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 21, "id": "a47189f5", "metadata": { "execution": { @@ -907,7 +917,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight + Activation accuracy after prepare + calibration: 0.9645\n" + "Weight + Activation accuracy after prepare + calibration: 0.9646\n" ] } ], @@ -945,7 +955,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 22, "id": "1209c6c2", "metadata": { "execution": { @@ -960,18 +970,18 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.0905, accuracy=0.9745\n", - " Epoch 2: loss=0.0808, accuracy=0.9762\n", - " Epoch 3: loss=0.0741, accuracy=0.9788\n", - " Epoch 4: loss=0.0686, accuracy=0.9793\n", - " Epoch 5: loss=0.0641, accuracy=0.9799\n", - " Epoch 6: loss=0.0603, accuracy=0.9794\n", - " Epoch 7: loss=0.0572, accuracy=0.9806\n", - " Epoch 8: loss=0.0541, accuracy=0.9818\n", - " Epoch 9: loss=0.0519, accuracy=0.9814\n", - " Epoch 10: loss=0.0494, accuracy=0.9828\n", + " Epoch 1: loss=0.0908, accuracy=0.9755\n", + " Epoch 2: loss=0.0804, accuracy=0.9769\n", + " Epoch 3: loss=0.0739, accuracy=0.9784\n", + " Epoch 4: loss=0.0684, accuracy=0.9793\n", + " Epoch 5: loss=0.0638, accuracy=0.9802\n", + " Epoch 6: loss=0.0602, accuracy=0.9807\n", + " Epoch 7: loss=0.0571, accuracy=0.9818\n", + " Epoch 8: loss=0.0538, accuracy=0.9815\n", + " Epoch 9: loss=0.0516, accuracy=0.9812\n", + " Epoch 10: loss=0.0493, accuracy=0.9824\n", "\n", - "QAT final accuracy: 0.9828\n" + "QAT final accuracy: 0.9824\n" ] } ], @@ -1019,7 +1029,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 23, "id": "76f11a15", "metadata": { "execution": { @@ -1050,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 24, "id": "f2b809f3", "metadata": { "execution": { @@ -1099,7 +1109,7 @@ " quantize_3: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(view, b_activation_post_process_4_scale, torch.int8, b_activation_post_process_4_zero_point); view = None\n", " dequantize_3: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_3, b_activation_post_process_4_scale, b_activation_post_process_4_zero_point, None, 0, torch.int8); quantize_3 = b_activation_post_process_4_scale = b_activation_post_process_4_zero_point = None\n", " \n", - " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_51671/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", + " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_52887/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", " model_4_norm: \"f16[1, 2352]\" = torch.ops.coreai_torch_ext.model_4_norm.default(dequantize_3, p_model_4_weight); dequantize_3 = p_model_4_weight = None\n", " \n", " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", @@ -1204,7 +1214,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 25, "id": "79b829c0", "metadata": {}, "outputs": [ @@ -1213,7 +1223,7 @@ "output_type": "stream", "text": [ "module {\n", - " coreai.graph private noinline @model.4.norm_6e2877fa(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", + " coreai.graph private noinline @model.4.norm_02258695(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", " %0 = coreai.constant dense<1> : tensor<1xsi32>\n", " %1 = coreai.constant dense<9.99999974E-6> : tensor\n", " %2 = coreai.cast %arg0 : tensor<1x2352xf16> to tensor<1x2352xf32>\n", @@ -1228,7 +1238,7 @@ " }\n", " coreai.graph @main(%arg0: tensor<1x1x28x28xf16> {coreai.name = \"x\"}) -> (tensor<1x10xf16> {coreai.name = \"dequantize_5\"}) attributes {__coreai_pure__} {\n", " %0 = coreai.constant dense<[1, 2352]> : tensor<2xui32>\n", - " %1 = coreai.constant dense<[[[[-1.198730e-01]], [[5.944820e-02]], [[1.313480e-01]], [[-2.583010e-01]], [[-1.341550e-01]], [[-1.275630e-01]], [[-5.813600e-02]], [[-3.762210e-01]], [[4.141240e-02]], [[-1.055300e-01]], [[-3.027340e-01]], [[-2.644040e-01]]]]> : tensor<1x12x1x1xf16>\n", + " %1 = coreai.constant dense<[[[[-1.202390e-01]], [[5.975340e-02]], [[1.311040e-01]], [[-2.587890e-01]], [[-1.365970e-01]], [[-1.278080e-01]], [[-5.783080e-02]], [[-3.754880e-01]], [[4.171750e-02]], [[-1.052860e-01]], [[-3.027340e-01]], [[-2.648930e-01]]]]> : tensor<1x12x1x1xf16>\n", " %2 = coreai.constant dense<[1, 0]> : tensor<2xui32>\n", " %3 = coreai.constant dense : tensor\n", " %4 = coreai.constant dense<2> : tensor<2xui32>\n", @@ -1238,19 +1248,19 @@ " %8 = coreai.constant dense<0.000000e+00> : tensor\n", " %9 = coreai.constant dense<0> : tensor\n", " %10 = coreai.constant dense<0.000000e+00> : tensor<1x1xf16>\n", - " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", - " %12 = coreai.constant dense<[1.657100e-02, -5.157470e-03, 3.261570e-03, -1.451870e-02, -4.692080e-03, -8.186340e-03, 1.436610e-02, -2.389910e-03, 2.101140e-02, 6.839750e-03]> : tensor<10xf16>\n", - " %13 = coreai.constant dense<3.419880e-03> : tensor<1x1x1x1xf16>\n", + " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", + " %12 = coreai.constant dense<[1.654050e-02, -5.519870e-03, 3.974910e-03, -1.425930e-02, -4.711150e-03, -8.491510e-03, 1.428220e-02, -2.170560e-03, 2.095030e-02, 6.191250e-03]> : tensor<10xf16>\n", + " %13 = coreai.constant dense<3.410340e-03> : tensor<1x1x1x1xf16>\n", " %14 = coreai.constant dense<0> : tensor<1x1x1x1xsi8>\n", - " %15 = coreai.constant dense<\"0xABC3B8BD3FFD3B3916CF2BEEFBB3DEF73DE5FD58D11907D6B7E1CE272FBE184F449BC0122A2B45D9E2DFEFCB3539F9F69DE1533527C7ECF7393268DCD591E1AC5120283DB053D2D61BD2202A07DC05F4D3E6287FE8FEC995EDB63B810138E1C12D41E143C1BF4DF7B5232AE6\"> : tensor<12x1x3x3xsi8>\n", - " %16 = coreai.constant dense<1.528740e-03> : tensor<1x1xf16>\n", + " %15 = coreai.constant dense<\"0xAAC3B8BD3FFD3B3916CF2BEEFBB3DDF73DE4FD58D11907D6B7E1CE272FBE184F449ABF122A2B45D8E1DFEFCA3639F9F69DE1533527C6ECF7393268DCD591E1AC5120283DB053D2D61BD2212A07DC05F4D3E6287EE8FEC995EDB53B810138E1C12D41E143C1BF4DF7B5232AE6\"> : tensor<12x1x3x3xsi8>\n", + " %16 = coreai.constant dense<1.631740e-03> : tensor<1x1xf16>\n", " %17 = coreai.constant dense<0> : tensor<1x1xsi8>\n", - " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", + " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", " %19 = coreai.constant dense<2.212520e-02> : tensor\n", " %20 = coreai.constant dense<0> : tensor\n", - " %21 = coreai.constant dense<1.768490e-02> : tensor\n", - " %22 = coreai.constant dense<7.104490e-02> : tensor\n", - " %23 = coreai.constant dense<1.507570e-01> : tensor\n", + " %21 = coreai.constant dense<1.776120e-02> : tensor\n", + " %22 = coreai.constant dense<7.025150e-02> : tensor\n", + " %23 = coreai.constant dense<1.512450e-01> : tensor\n", " %24 = coreai.constant dense<0.000000e+00> : tensor<1x1x1x1xf16>\n", " %25 = coreai.blockwise_shift_scale %15, %13, %14, %24 : (tensor<12x1x3x3xsi8>, tensor<1x1x1x1xf16>, tensor<1x1x1x1xsi8>, tensor<1x1x1x1xf16>) -> tensor<12x1x3x3xf16>\n", " %26 = coreai.blockwise_shift_scale %18, %16, %17, %10 : (tensor<10x2352xsi8>, tensor<1x1xf16>, tensor<1x1xsi8>, tensor<1x1xf16>) -> tensor<10x2352xf16>\n", @@ -1268,7 +1278,7 @@ " %38 = coreai.reshape %37, %0 : (tensor<1x12x14x14xf16>, tensor<2xui32>) -> tensor<1x2352xf16>\n", " %39 = coreai.quantize %38, %21, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", " %40 = coreai.dequantize %39, %21, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", - " %41 = coreai.invoke @model.4.norm_6e2877fa(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", + " %41 = coreai.invoke @model.4.norm_02258695(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", " %42 = coreai.quantize %41, %22, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", " %43 = coreai.dequantize %42, %22, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", " %44 = coreai.transpose %26, %2 : (tensor<10x2352xf16>, tensor<2xui32>) -> tensor<2352x10xf16>\n", @@ -1283,8 +1293,8 @@ "{-#\n", " dialect_resources: {\n", " builtin: {\n", - " resource_16376598689397904362: \"0x10000000F83B033CE73B003C1F3C3E3C193C2E3C073C293C0E3C253CE43BEE3BF33B043C183CEF3B183C1B3CE03B193C043C153CF33B173CE73BF13BF13B073CFD3BB93B0D3C013CF23BED3BD23B0D3C103C193C0B3C033C083CF93B2A3CEC3BD33B283C343C5C3C583C4D3C873C6C3C5B3C0D3CFB3B103C493C0C3C143CF33B4F3C493C373C333C8A3C753C6B3CFD3BFE3B203C193C073C1B3C613C813C8F3C823C4D3C303C0F3C1A3C163C033C193C163C473C763C453C923C953C873C4E3C523C503C5D3C1F3CEF3B283C193C333C633C503C583C563C673C723C693C493C403C213CF53B153C5F3C523C513C263C333C3F3C503C1C3C893C583C483C133CF23B203C203C513C663C453C293C713C373C4C3C5C3C5B3C2D3C043CEE3B0F3C1A3C773C7C3C613C213C493C613C6F3C6E3C7B3C373CFB3B033C0A3C523C523C6C3C883C6C3C793C7C3C803C0B3C2A3CFC3BF43BFE3B093C233C453C613C593C803C793C5C3C353C143C163CEA3BEB3BDA3BF03BDF3BE43BE53BE53BF63BDD3BD23BEA3BFE3BDE3BCB3BEC3BDF3BF73BEB3BE23BF33BE53BF13BEA3BDC3B073CF53BFC3BEC3B033CFD3BEC3BD53BE93BDE3BFF3BFE3BDB3B073CF93BD93BEB3BF53BE63B063CDD3BF93BE33B013CFF3BE93BD53BF53BFD3BFE3BF43B023CE93BD53BF73BF83B023CF63B083C003C323C133C233C0B3CE03BF53B003C053CE53BEA3B0B3CE23B203C113C7F3C643C5B3C243CFF3BF63BF73BF13BFE3BEA3BEC3B423C7B3C6A3C4A3C8D3C843C253C163CF23BE93BE43BEA3B003C243C5F3C863C5C3C953CA13C6C3C433C293C053CF73B003CEC3BD33B533C733C983C613C803C4F3C4B3C133C0E3CEF3B003C043CEA3BF13B4B3C893CAB3C703C453C1F3C223C003CE33BF03B023CFD3BEC3BFD3B3C3C703CBB3C673C4B3C403C023C113CF73BE03BE73BF53BE83B023C153C2F3C623C433C593C283C173C013CF83B043CEA3BFB3BCF3BDB3B0C3C0F3C143C083C393CEC3BEB3B033CED3BF63BCF3BE53BE63BEE3BE33B063C0A3C1F3C153CF93BDD3B033CEF3BF43BED3BD33BF53B043C043CF13BDA3B063CF13BF53BF93BE43B023CE93BC53BD13BF03B023C013CE13BE23BE23B013C003CED3BAF3BF93BEE3B063C013CD93BE63BFF3BFB3BD63BD83BE23BCB3BEE3BE53BEB3BE03B003CED3BF73BDB3B003C013CE73BEE3BF53B013C173CE63BEC3BEF3BE83BE13B023CF63BE73B033C103C093C3D3C613C4C3C6B3C0F3C013CF43BE53BF33BF63B053C333C593C463C293C4C3C8F3C5E3C133C033C003CCF3BB83B0A3C273C823C853C6E3C303C3C3C343C2B3C183C123C043CEA3BF33BFF3B293C693CA13C6E3C473C303C3A3C263C153CDE3BE03BDD3B053C133C303C923C8F3C753C1F3C2B3C2A3CD53BEE3B053CBC3BC33BD23BEE3B393C6E3C2A3C5B3C433C0C3C253C313C283CFD3BCF3BF93B023C243CFB3B213C443C493C273CEB3B2E3C163C0D3CE43BD73B033C013C093C133C413C283C153CF63B083C003CF43BE83BD73BFF3BDC3B033CFB3B033C0A3CFD3BD23B133CCB3BF93BEE3BF33B0D3CE63BE53BE13BF83BE73B083CF63BF33B073CF63BEB3BFC3BDF3BFA3BEB3BEB3BD93BE83B013C073CFC3BC33BE13BEF3BEB3BEC3BEC3BD83B013C003C003C113C413C453C523C283C423C2A3C2E3C2F3C193C003CE23BEC3B193C2A3C6A3C843C8D3CAC3C9B3C4F3CF13B2C3C4D3C303C0C3C113C0C3CEA3B453C323C3E3C3B3C423C393C543C0C3C213C063CD53B1F3C5C3C603C3F3C603C463C593C713C873C933C3F3C163C643C3E3C473C713C2B3C603C5D3C4C3C663C703C643C713C333C0F3C163C3F3C463C2D3C553C273C173C7D3C823C443C4A3C653C1F3C0E3C3F3C413C623C533CFA3B443C4C3C743C423C483C4F3C233C143C243C273C3E3C3A3C393C423C463C283C4E3C9B3C573C6C3C3E3C2E3C2F3C3C3C503C5F3C513C0F3C193C353C4B3C583C2C3C2B3C533C033C0A3C3B3C5D3CEA3B503C563C423C263C733C523C103C243C1C3C2A3CFB3B1D3C523C2A3C2B3C403C0A3C273C3C3C4B3C2C3C373C443C343C3F3C213C2D3C183C0E3C223C383C3A3C3E3C273C143C023C433C303C123C533C1A3CEB3B5E3C7B3C323C063C2A3C0B3CDB3BE83B053C1D3C083C443CDB3B003C403C4D3C5F3C863C1B3C403C373C453C0C3C593C253C323C0E3CDD3BE73BDB3BE73BE93BD93B073CF13BFA3BDC3BF83BE23BF53BE33B113C173C193C333C463C2B3C2A3C333C603CB23C483C343C233CFF3B043C003CC43B183C073C183C343C4F3C383C443C273C903C0D3CC83B1E3C4C3C2E3C413CF53B4E3C753C5A3C493C243C113C473C9C3C023C283C193CFF3BC13BFF3B493C6F3C193C6E3C473C393C573C573C033C273C333C153C0A3C1C3C2F3C983C453C213C0C3C3E3C453C6D3CEA3B123C273CFF3B0B3C1A3C203C773C383C093C023C1B3C203C273C053C1E3C443C363C0D3C253C3C3C5C3C2E3C443C3B3C2D3C193C553C0A3C273C293C0F3C113C0E3C4A3C203C5B3C403C2F3C353C203C7D3C0B3C163C373C103C083C243C003C2A3C0A3C343C113C1C3C313C203C043C143C3A3C013C1D3C033C123C033C0E3C1E3C0E3C033CF13B2F3CF73B313C243C2F3C053C093C403C303C083CF83B263C063CFD3B3E3CE53BF63B383C153CE43B193C2C3C043C023CED3BFD3B083C3B3C1F3C003CF53B583C363C3B3C6C3C2E3C203C1F3C2D3C1B3C173C2E3C2E3CF13B003C003C293C463C743C5A3C643C4C3C443C453C663C5E3C3D3C183C103C2B3C183C4B3C3E3C573C273C0A3C233C413C183C363C313C153C1F3C263C2F3C293C0A3C3C3C2E3C1B3C0A3C113C0E3CE13B343C553C363C723C223C133C123C2E3C563C5F3C173C0B3C473C2E3C413C563C373C693C023CC03B113C323C313C643C2C3C213C183CD23B763C633C493C4E3C273C1C3C073C103C3B3C573C293C363C3D3C123C723C6B3C393C4C3C193C183C443C3A3C2A3C4D3C243C383C553C4E3C273C563C463C5E3C463C533C473C143C6A3C283C2B3C223C233C413C173C9B3C5E3C3F3C263C593C473C473C3D3C193C243C2F3C1B3C1E3C533C813C2E3C363C223C163C0B3C253C113CF83B1B3C0E3CFF3B0D3C263C8A3C013C2F3C323C183C013C203C143C0F3C1C3C1D3C083C163C483C593C2B3C263C5B3CDE3B0A3C1F3C093C443C333C553C2D3C453C493C4B3C393C5A3C4E3C193C053C213C263C093CCE3B013C163C143C3E3C083C003C053C533C343C653C603C523CE03B273C1B3C453C493C173C463BEF3BF73BF63BEE3B023CE83BED3BDD3B013CF53BE93BE03BF93B033CF93B013C093C143C1C3C223C373C553C2E3C4B3C3C3C383C123C1A3C103C163C233C3C3C533C753C463C1D3C4C3C7C3C813C653C2A3CEE3B183C0C3C493C5B3C783C833C763C633C943C6D3C683C523C4C3C1D3C353C543C443C4F3C413C803C5A3C3D3C8D3C6B3C3C3C393C463C1C3C2D3C503C693C893C4A3C3F3C2B3C733C943C633C413C3A3C5F3C203C213C293C963C4D3C483C3B3C393C9C3C813C653C5B3C343C3C3C293C1F3C133C3B3C653C583C1D3C8F3C893C3F3C4A3C543C373C683C223C0B3C123C393C2A3C4E3C193C8D3C533C143C5B3C523C5E3C2D3C493C043C113C353C303C1D3C4A3C3A3C163C253C343C483CD73B303CFC3BFC3BF73B163C333C273C083C093C363C1C3C1E3C1A3C243C253C103C103C1B3C253C093CDB3B1A3C2C3C053CCF3B123CF83BF03B233C183CEF3B173C273C073C173CED3B143C253C023C083C0C3C1B3C1F3C123C0C3C1D3C233C4A3C333C443C113C2B3C323C4B3C463C323C0A3C063C003C003C083C113C483C603C573C5C3C523C173C503C6A3C5A3C053C003C1D3CF53B533C6E3C473C503C8B3C483C3F3C2F3C393C583CDB3B003C173C393C263C403C2B3C1D3C5A3C3C3C483C563C2C3C383C1D3C003C293C3F3C193C573C4B3C343C363C1D3C4B3C403C4E3C193C2F3C423C393C383C513C6A3C643C5B3C853C623CA43C853C783C4E3C2E3C403C483C2B3C583C6D3C4E3CA53C713CB53CD13CCB3C9E3C2D3C253C313C2F3C293C953C533C693C7B3C5B3C6F3C983C5F3C713C7C3C3E3C1E3C773C243C963CB33C963C7B3C583C4C3C453C3A3C153C6D3C213C003C543C663CD83C0A3DD63CB93C313C4B3C1D3C3A3C1E3C3D3C673C023C2B3C373C7C3CCD3C9C3C833C283C183CEF3BC33B363C1E3C223C1F3C3C3C133CB53C393C263C413C013CDA3B3A3C3C3C4B3C1C3C143C0C3C443C183C453C583C023C073C1F3C3A3C2E3C3D3C313C563CC03B003C423C433C883C3F3C603C3B3C653C623C1F3C1A3C3E3C1D3C0B3C003C393C8A3C3A3C5A3C653C2A3C373C7F3C6B3C633C323CFF3B003C033CF73BEE3BD13BEB3BF23BFE3BFD3BD53BFB3BFB3BDA3B053CF03BFA3BD63BF33BE63BE63B043C003C293C033C0A3C023CF03BF93BEC3BDE3BED3BDA3B003C023C333C113C433C203C2A3C1B3CCE3B043CF43BE93BEB3B043C0A3C2B3C163C113C3C3C283C1D3CF13BE43BEF3BBE3BFD3BEE3BF63B163C153C1E3C103C223C1C3C2A3C0D3CF23BC93BED3BDE3BEA3BFD3B153C273C2C3C1A3C2B3C133C183C413C2C3C273CE53BEB3B003C093C2F3C1D3C343C483C543C223C343C093C1D3CF53BF23BFA3B003C063C0B3C103C303C5B3C233C163C233CF83B093C0C3CED3BF13BFA3BE43B023C4E3C293C103C163CF23B0D3C023CE53BEE3BF93BCB3BDE3B193C3D3C5C3C3D3C263C053C053CF93BE93BDF3BF33B003CD83BDD3B113C103C2E3C263C043C063CF83BB53BD83BEB3BEB3BFD3B013CFB3BD33BE83B023C003CF53BBF3BD53BDF3BF13BFC3BF33B013C013CD33BF73BDF3B033C003CC53BF23BD03BF13BFE3BE03BEE3BF53BDB3BE73BD83B013C043CF93B043CEE3B0F3CD13BE33BE53B033CD73BEA3BD63BE03BD63BCE3BD03BFA3BEC3BED3BEA3BE53BE53BCE3BDA3BED3BF63BE63BED3BDC3BF73BF23B1B3C013CF03B013CF33BDD3BCA3BD93BE23BD83B033C1A3C483C5E3C6B3C543C1A3C043C043CE73BFB3BE83BF03B0F3C303C483C823C7A3C743C3D3C1D3C2C3C063CF23BF53BDB3BF83BFA3B543C933C9A3C883C923C6C3CCC3CA73C273CFE3BE43BE23B163C1D3C543C963C913C603C883C983CE33C873CFA3B013C0F3CF73B153CFC3B483C7A3CA73CC13C793C893C873C8A3C043C103CF53BF83B1D3CF63B3D3C693CC03CF73C683C603CAF3C303C113C083CDC3B033C093C0B3C313CC73CFF3CDE3C8C3C913C5C3C3A3C083C013CF43BD73BFF3BF73B423CB43CBF3CA13C723C153C133C2E3C1F3C0B3CE03BEE3BE83B083C213C103C623C313C3D3C403C703C503C223CE83BED3B043C083CF33B0A3C363C623C513C1E3C403C453CFA3B0E3C063CEB3BF93B063CF63BD43BE43B0A3C073CF63B0E3C0A3CE63BF13B073CEA3BF93B033CC73BEA3B0A3CFB3BCF3B0D3CE23B173CF73B053CF33BF33B9F3B003C0B3C153C783CA33C593C4F3C343C273C723C5D3C3A3C0E3CB33B093C393C403C463C513C063CE83BE13B033C313C1E3C473C053C903B503C103CE53B0E3C093CFD3B053CED3B013CF33B2E3C203C673CA93B3A3C573C533C553C843C423C3A3C333C2B3C003CFB3B023C1C3C7C3B203C533C663CBA3C733C3C3C133C603C563C483C353C253C383CA43B053C053C763C9A3CB63C5B3C403C083C063C413C6B3C793C563CA33B0E3C4A3C713C783C873C7E3C4D3C153CFB3B183C5F3C773CE03BA63B3A3C6F3C5E3C313C4E3C573C643C1E3C283C0A3C313C1D3C463C493B3A3C423C4C3C6A3C023C313C383C403C383C153CEF3B133C1F3C873B193C3A3C253C393C113C483C213C0A3CD93BDE3B063C1D3C763C923B533C263C3B3C293C273C3E3C0B3CF03B053C003C1A3C1B3C403C263B123C1D3C4C3C4D3C223C3A3C2E3C353C443C333C103C2B3C0B3C813BFF3B023C493C423C4B3C833CA23C703C433C1B3C2B3C193CF93BFF3B003C293C413C9D3C7B3C923C613C553C313C513C503C2A3C0D3CE33B003C053C343C783C633C6A3C3D3C463C473C6F3C7C3C383C1A3C073C1D3C3B3C443C4D3C4E3C0E3C143C063C293C3B3C2E3C3D3CD23BD23B533C293C4B3C133C213C013C103CDF3B113C033C2E3C213C353C013C333C493C703CA83CB03C443C193C203C3A3C2D3C323C0C3C303CDD3B263C323C723CE43CA63C753C4C3C903C8D3C5E3C453C0F3C2F3CDE3BEE3B133CA63CF33CD43CA53C2F3C4F3C723C433C673C3A3C513CFA3B1E3C673CB93CBD3CA23CA13C513C2E3C123C1E3C6B3C673C303CCA3B443C503C7F3C913C6B3C743C903C083C013CF43B353C2B3C383CD13B413C2C3C4B3C5A3C3E3C853C1F3CE43BF33B083CF73B1D3C433C013CEB3B353C473C483C5B3C263C0A3CDA3B163CFC3BC53B393C6B3CEA3B553C263C663C3C3C543C483C183C033C043CFA3B083C2F3C433CD03B493C0C3C453C523C483CA53C2C3C283C423C213C033C363C173CD03B073C033C633C7F3C933CAB3CB43C6A3C243C4E3C243C273CFF3BDE3B003C053C583CA53C8B3C673C6E3C303C563C573C483C093C0B3C\",\n", - " resource_6665084973981360251: \"0x10000000FFFEF70EFA02E7CAEEE0F60C01010006EC00F7FBF2E1FBECF000F3FBF9F3030301F5F8F208FCF604F4EC140D0C0401FB050A0802F6FD0C060D06F1FC03FB09F6ECD9D5D0E9EDFD03F40B0C0AD7AFB3C4CEF8F5EAFEFFFF0C1BFDCBA8BBC8D1DCEDF8F8E50CF4F4E6AFC6F2E009EEDCF1FDE9FEE4D7D6D11623FC0CE8E1FC12F8F0D5E4F9111B1F23F4DEE8FA0B02F0C6DBF0072618FF12E70B0B0FF6E2D8D5EE0B250C0710F80DFA08F8F9E8E2E9D0FB0501F40703F9FB0AF90E080B100300070A0B05F5FE02090FF9F501FE06F70EFE01FB0AF6F8FB0A0BFEFB14000305F6090EFFF801120104FBFFF90502FC03FC02F90509F7FC08000709F6FE080D0401FE03FCFDF7EFDAECFB000102FF05E7F9FE0901DFDEE0E50B0501FB07EBE3F6F916F1DDD4D1FC00F70BF3DDD3F2FF240FF4E5D8E7FBFB07FCDCCEF5F60302FBEDFCEEFE0B0607E8DADE0D0F06FE0602F4090A0EFFE9FEDEE9141715F80BF80304F604EFF7E9050FFA08020E0102F80709F8FBFD0902F901110DF5FDF6F40803FA0CFF0AFE04040E0AF90DFD04F5F6020303F80AF8FA02FCFD0406F601FA160E07120BF8FD010207FF010404FD0CFB09F0FEFC0201FF08F7F5E9E6E7DBDCE1EF0705FE00F4F4FEFCEFDBCCBDCCE906020AFDF7F110F4FDF7FCDFCDE80A080F0FF9F8F5F10F110DF7F5E9F5FE01FC09F2ECF0263100140C050C010C010FE5E9F3091D1F1908F90CF5F812F9F8E0FAF81A240DFB0BF80A04FAFAEFEFEC0B18081405F80F050908FE03FB03FE07140DFF08020DF9FF050D1101F4F4F307F2F5FDFAF8060B07FCF7FD03F5FC0302F8F7F9F4FBE9E7FEE6F610EADDFDFEF9F0EACFF5E4D208FB0BEE09D8E6F7FADDE7CE00DEEFFE06FFF7EFF7F3E8C2F4E3F9F6F70F06100B1EFECFEBFA01E5F4F2F8FB0D19141F03C8F7F80CE2DEF9F2100E040F1009BFE5FDE5F0E2E4ECFAF0E3F00DFFE6DAE8EA06E5F8F1EAC3E8EC0700F9DDE40201F9F3DFD2DBE5EFF012E4D8DC0A04FC19EBDEECEFF3F2FCEFE8DB0AF7F6100EE2EAF2EFF0F5E5F8DCFF04171A18130FF8E9F2E7FBEFD6CDF306FB130702DECED2DEE1FDE7F4CBD8CBCAC9C1C0CFCAD7F60CFBFB08090A080A050CFEFF06090400E3EE00F6031317EC0CD6EAF8E8DDFAFBF6F403FD03FBFFDEEDFEEDCC06DEEDDBFC09F7091101D2070DE409F6F9F6F41116221816F00F10FC21FF18F8E1F61F090D010BF4EDD8070900EDD2E7FC061D15EAE9E8EF0C09FDD3DDE5DEF80EF5F5FAD9FC0C0DF8D1DBB9DBFEF4040B05E907FB0F0DFAD8EBF1ECF3F70903F1FB0706131FF4FAF20303E9F706F3ED090FF81511F800E9F9FCE40CEFBCFA04201D120A03EADCE0D8FDF8F1DAC5C7BBB8BCB6CFC0D9EEF8080BF7DEEED6EAE7CEE1C4DBE2EFFDF7CCE9E9ECE9FFDBF5F018E6E2E9E2DCFDF2F60B0C07F6F705E5ADD8C3F7E8F6F300FE1F061DFEF3F7EBECF8FF06FE0C09061EFB06EEEF01EFFD18061C0B0AF0F708FF0ABE00E0FB0C2307F3EEDEECF80BF3D2E3C417090C01F6DEFEEA091200AFEFE9FB07F9F8E9EEEAFCF51004ECE1F60D0BFEF7FAFE060209FFFCDCE1F9F200F708FAFDFD071B08ECE4D4D01BFD000A0E020AE7EEDAE004DBD8E1FE0016221106F3D6D8E5D8F8EED9CADABFBDD3BCCABACFDDF5FCFFFDFF0FFBFBFC0FFDFC0CF90AFF08060712F800F8F5F7FE06061300EAF2EEEADCDBEFFBE2D8E4EDD9F6EC07DFC5DCF9E8E9E7E2EAF3F40103EBF9F4F6E8E8F2DFE3E301E11B09E8E8EEFAE605F0D3C1F3EBD804F0C5E9F5F8F9E4CEDBFBF9F9F003E2FAF4FEF3DECACFE9ED0D0CF8F5DBEEEDD8EACFC7F90BF6F6FE06DEF8D4D4F8F6DE0715FFF712FAFCFEF3EADCE20B1700FDEB05FFFAF3E7F9FE050B0F0C10FD0CFAF8E40CE9E40CF50BEDF0F3EFD8D3E9E60EF3F8EBE8C4C5BDCFC9D6EDE2F1F302030AF0FCD1F6C9E7D9D7D6D5DDFA02F1E6D6F3EEE3E8CCDED6E6F4FAFED6FD02E7000D00EA000DE3C90BE0D6F8F20412F3FEF8F51514F4D4CBFE111617080C0503031012E1E4FFDC29240D1114E9E4FD0612E4F8FD00241F282901E8F7021F27E2F2FB1C26212C1AE0F70A0F1329E6FDF6181D20281C00161713101ED002F914120F2202111811031CE7DD1EDFE6ECEA00230107110220EEF0DCF3DEE9D0F7F60AFF0F0102DA00F4D8FF03D4E0E4D3E8CBBEC9E1E7F3F6DABEC9B0C0C9B2C8CAC809F901FBF908F40EFDFEF802F803FD0505070AF7FBF4FCF5F4F0F3FA0803FAF70E03F7FCF806EAEA01FEF60A01FC04F1E1E5F4E2EEF5FD041704F5FC01F2E805F4F2F20B01110D0E04FDFBF5100E08250404051B2BFFFFF9FD050C0F2626EA0EFC111BF90DFC00FB18124317EE1006111A0E0C00FAF609202AED02030FFB0DFFFD01E7F8210C0AFDFE0A000B0109F50CF5EE1E08FCF4F7F8FE09F6FEFD06F8010013F90A01FFF7ECEEF90C071002090600FA00FBE2F70908F7FA030201FAE1FAEEF60303F6F5FC0B07FB09F5FBF8F7FB05F8FBF700F90F0FF404120B1A190403FA040105F90C0300E20A010D0215FEFE02FB02E0DBD5E603050307F1030002FCEFF1ECF6F1EE120B02EF04081209FDE0EFE701F7EE0FFFF7EE0EFBE3F8CECCC2DC0C07101CF8EE0900E9FAC5BFC6B8E30E0503E2F6FE0BF504E9BFBCCFCCF209FBF9FC00F9FD00F101DCDC210C020302FD04F7F9FEEA0A2408F9EDF3F2EE0201F7FD0B0E001200F7D5DBF0F803F507E8FEFE0F0C13F503EBFFF0050000FEFCFBE6DBECE4E9F7FAF40209F706F0FFE2BFE5C0DED5C2DDEBE4FFF9E1CAFEF4F7F8EEF2EAF5ECEC03E7D5E0E7F9030F040BFE09F2C813DBD7F9FEF3F40718180B100CE10A06E6ECFC070C0A1F1C2C2823E8F804EC00ED0A04060B142F292FECF70BFA0D0F1913F8F5F41E1927FF03DA060C001A2208F5ED080E14FD0ED4190E130D13FBDEF9F80802EDFCFC0A15271531FDF0FCF6E7F4EEFCDD100D1A1A1AEAE9E2E7F3F0DD0BF5E2141E170CD8EBD4C8D2E2DE0FFA00F1F7D1D0A2B7C6B2C0CDE50BFBF0DEE3D6D0DEC2C7DDC1BE01070103EAF2B4E7D6CFE8BFD6E5EA0CEBE8CEEAE1FEFCE9E4D4E6D6EA04DFD4D3E6F4F113FB02FC02F0CD11EAD6E4F1EDF1120E1C121C0ED5FA0BE2FADF0B0CFD1B23190F25F40DD9F0F4020D0B02FE271D2D23EF08FBF10D1D18291A08FC0F121AFD09E5041A1F182F1EF10B1011240206D418151F292FFE000504FF1AEAF70A1B12241F2AF9DFF4F9030CDC07F6180821281FE7E1D2EAF4F1C90DE9FA1614171CE9D0C2CED7DBEB08F9E7E3D8D3B9A4AFE2ABC6CCCCFFFEF9DCEBC1C4BBCACFC6C8D004100CFA03F5F3081C0F18130A0E020B0F14ED05FA071108170FF4F808F80F19FFE7FDEC01FD071A08FDFF0803F5F8E8F2E3D5DC0800F4DCFFFF06ED08F7EDE4F9DADAEAF8E40001FDEFFD03E4FA08CCBBEAFD03FF0D0FFEF9FFDB0401BBD4C5F8F70B0409FA06F8FD04E1BBC1D4F30E020305FDF3F0F2D6D6B9FB0F111F15FBFFEA172009FCDBE61B171B01FA07161D23231604D2CC100FFEFB0F11FA04E90CE0C6A5C3E6EE06FC080602F3FCF5E7E8F3FEFC0EFA00F81109091514110F0A031713021305070EFFFD110911FF0812000DFF1515FE0311131915010614020A0B03110A0F0C0F07FA05FE050E090D09000413090E0F01220711150C0B160D08FD110A190309180F0D06FF0A0F101605160C1B190815061009160A040D02221D060914100F041107170800050F1EF6F1101E0C11010B12091306181D03180A211615051209FE051C153D1F19220F18030709110F150A05150C30051306020D000D050E04140F1623110B130814FE0916080210201C1B050912130A130F0610170BFE120D05FF04160106FF04170D09091416151104140C15100A1718140A07000D020B110716061600151B1A0203F90EFF0906170E14110912130C1A0612FA02040A17040D020D1A00FAFE031815050C0502081A1419FFF1DEF707120F0F070C0C02131E0DDDF60F190F0101FF101910211CF602100702041314080A001E1E1C0A1917071B0C04FE160E2013121309FAF60216100518161519130D2AF2E3E80C0E000D160A171C120B180809FE1D070D1C041212140618081914081819010D130606070B100700070D120B0A0616F40800E2DEE41EFEDAE1EEFAF401FED3E1E0CEEEE4C3D4F5EDD7D009140600E018EFD4EED5C8E5EDEBE1DB0704F5EB02EACFCAC2F5EBDACCE5C3FA01FAE4E1DED6DFF7FADBC4FEC6D4EFFFF7DED8F7F8E8F3E9ECCCD6EBDCEADDE9E3EEFEF9EDE3E4DFE1ECFDECCEC6EDE5E2D8E2F7E700CCE8FFF6E1DAFAECDDF0FDFDD2EFC4D4E4F4C7CAFAE5F901FAFBF2DF2AE9FAF4EFF9FF0419170905FED40F22FF00F7F0F3F91903F5FD17F7B5F0F40F03F90C0405FFEBCAF9FBE3CCC6EDE2D30FDFB5BFDAE4E50A160B0B00001E1203190B10171012FDFBFE0F1A2813123008F6F21013F60CE203F906FC0400F6EDE400E8090D01FEDFE3D4D1C4DEE1E70DF1EDE6F3FFFFF8F6D7BBE1E0D007F7F6E3FDF4F011FBEEE1E4E9DD05E7F4D9EADCEC04F3E2EB01E3EB0E07F7E5F4E5F3FEEBCBE6F1DCED06FBCBDCF9E9D203F6DED5CCFADD12EDEAF5E7DAEDFEF2DBE5F20EF30EED19F10003F90BECF2090F010D0EE81D160F0BF9FFF9071A07FFFFFB01D50802F30F00080A0A0EECDB0001E1D3E1DAF204EECEC4CEF0F70EF6F3FFD6DFD31B2816050BDFE8E201FCE6FAF9001108140718ECE9D41608F8E5DBD5F8F30208090BEED3D40B00FAE6F5DEEDF60104F0CCBED4DEF0F6E6E6F4F8FDF50805C5C0F6D7EFE9F2F7E0F9F7FFF8EDD4D0C4F305ECF0F106F9F1E5F5F0EAE9C00CE406E9F3F3F8CADBF1C5DDDB07D9EADBEAD9EBE8DAD5F6F5F0F4EEB6DBECD7D80AF5ECFAEB0D0BBEC6140B0C0EECDBE3E4E6EC0D0E25D60C140901EEF3EAFA0908020411FED9E90208EDED01050C0BFDC9F50BEDB3CFE1D5DDF3E3B8B5DDE60604120C0605080FF90E0EFE11030F06F3E9E9F5FCE5D9F1FF01E5F8081B04E3E6E7C6C8F0DDF311F3F8F7100E0BEEEFDBD8AEB1E9F8F4DDEAFAC901F6FFE5D7D6C0E0F3FFE7DBF0DEEF0709FCE6C9DBEDFFFAE906F6F1E8E3F5FEE2D2EA06FE02DCECF7190D120901B4CFFBD9E6E2020B06FF0F0BFBE9BFF4E2C8FDF6F4E408F40C04E4D1E8D9D4F2FD04FB10FD02FA111AF1FCE80E090E130F16EA2229200CE4E6FAFB0F03FF011900E601F2F9FA01FCEFFB13F7F6FAF8E5E4FCEEFCF2E0DECBE0EAF4F9F3FF01F2EBC7DA1424F9FEEEEAE9001FE8E7142007260C1A0AF6EEF1F4180EE6CE0909170F19120BFFD10AF7F7FCBCE4EBE601080907E0D4E6E9F1EFE7F0F0F1EE13F805D7C6F4CBF2E2EEF7D9F7F5F5FA06DCE2F9DF04F30AFAFAF301FFECEACEC8D80705E50D120B0305E0EED1C0CD0BD3E5E109EAD607ECE4F5DBF3F214BDE5E8F4E6E2F0EAFB03021112E8D8162EEFE9DEDDE2FFF808FD0DE6F21C1612F3E8E6DEFDFFDDD3FEFFC20CEE14EAE8EBC7FAE8EDD51801DDBDC8EECF0BE1A0BBD9EEFF04120A03040D090413010B0BFE070A160409020113100205180B09150C1404FD070F260B1B17020C040307100A160A02FAEFFC12FDFF00FFFB120A110F10F2E9DE060AFA07FD0309030A1218EFF5F2FF0F12F9FC010A120500100DF50E1A0E0A0A04080710061A11FDE1121204F902010A0B03FF090DFC040811E3F3020D03FE01170FF30A10F5EAEFFE010E06FE020A18071703F1FE0909150A05110C0A0804100CF6FEFC09160111170804FE051009070F0F190F010107170A0DFC0BF8FD12FFFE0C0B0012160E10100D1B090B1A060D010B1517020B020A0A0806FD1615070816150513FCEEEFEFDD080B0B0B06081017FCFEE8DEDFE3E8E1FE090D030A03FD0EEDD0E7C8D7E4F707180B11161620F4ECE5D8E60B0B0D171007F8FBFDFCC8E4C8090DFF0E0A0018190F0ADFCCEEF41408180CFF1901FC1EF3D7F7F5D70E1903010E180F0F19E1CCF901FC12190A14FF1308F902F5D9FF082D1C1E180D0F161E180900E3FE1B1813071C0F09160208FEFE120809041C0C0A0B031711FC00EEF30CFFFAFF11040E15010BF4E4CFDC1D1716FF0DEBD6F10A0B0CF405FAEF090EF816E7E2EB131CFD0CFC09FFFEFF081605F4C70DDA000D0F04FAF2FFF90210E9D307DEF506FCF4EBFB03090204F0CB08E50EF6CEA3DCFD0E0201EDDEE70CD50BE8DEB5D5120E02E8DEE2D31A0D12DFECD8D80F0DECDEDCE4BE13F6DEC4CAEBEE12F6E5E4EBECF40EEFD3D4EC0D0400090901F0FB0610F00FF6F60C020405110BF109240D01EA02EA0A0C11180C0D00CD120B00FBF70E04EEFEF3040704B2EC15F8F6EAE0FDE1F5DAC8CBD5E7F40AF5FEE1E2DA1A110A0AFBEAD5F91413F1F90AFDF0FA0D0412F6E5EF140F03120A1E0E131A010D1301CB12EE0C021910F505F2FA150503C4FEE500FD00E9E61CFAFF03FCF1BFFDED08F5BBB1E50D131103F3F4D906BF10F5DAD1E40C12FCF2EFE8D107090DDCE0E8EC1912FED9CBC0BD1512DAB8C5E202130FF5E8DEE8EA15ECC7B9D800F809F4FDEEEE02160E09FACEE3F8F0FBF4F80505052DFC11CF1501150B0909FC170DE51CFBFFDC1D1B180007EBFE0702BF0614F7E2C9CAF3DDE2EDB2C5D6E9060AF203F60F19FEF212F5FB03040207FDF50A1B0E05FCFBE5F5E1FEFBF40403010CFFF6FCEEF2E6EBED03080702F9000701EACCBEC3E1F704F6EF0C060800DED6DBE4EBEEEEF0EFEB180EF8EBE8DDE0E7EEF0FE1AF20A1137453D2E130A09F5043325051E1C352B352B191D221A2E2B28F50F12061C0F210A13122A281C18FCFEF9F2F40616192A2431301AFAF605E6DED6DDE20C0D1D434E2DF701F3D7E3D7D6F2FD083021251900F1EEEBF4D8FAE7FF0709000A0A080409010108F506090AFD040401F50A02F50BF7FC05F8FEF7FEF50704050503F400F0F503F1FD03FB0802F8FD0A02FFF9FEF4F4F6F7FD000B01F6FC0305000307E6EDF6F1F5F6F90AFE130516151EF2DAFBF0F7FBF809FB0D1B34242D0EE9ECFF0801030C081938332F3C06E4F4EFF80604F2050D1E19FE1A0DFC0D07FA07F8FAF7EBEDDBE1E2F6FF03090AFAFFF2EBE7DDD1E0ED010D16F9FB030508F3EDE2E4F1F70B211214FCF5FC0101FCF20807F90B100AFF02070508FF090E02040BF3F6FD0AFDF8FE09F6040207F8FB0B070AFBF201F4F102F9040302F1090204F900F5FB020BF3F202F1000902FEFFFB00FCF70A02F807F2E7F7E5FCF6F100F4FD030602020CFCE5E6E0F9EFFA03080E0B161A1A1104EBE3F6F2FDFE000610192B33231BFAFEFDFFF301080A282026231F180712000AFFFBF900021710F60E1F160A0E0A100A02FBEEF4E60123FB181719160700F7F8FCEFFFFA07F60AFA1104FF06FF0300E808ECF7F7040E1200FD04080AFFF706F9F70102FCFDF7F8FAF802F50800EEECF210F50CF7F7FAF60509FF020100F4F9FAF9F804FFF3F4F3E1D7E8170AEFEB08FE07EFF5060C2B2C394B2901EBF91307EFF5EC120C1819221A2403E0EF01E719EA080A0E0C161E1D16EBC3FEDB0BFFF91B020A190DFCEDF6EEF4B406100DF40CFFF2F9F7E2F3DFE9E9DEFCE5FCF0FDD5DEE2EADEFC17E918CED5E6E505F7EBDDDFF914320828FFE1ECE8F10101EB080D183BE70F0702EAE9FCF8191718131A1516EDF0F1FBFCFF0A292E2C1E08190C0D0903040902FC0A342E030EFEF8C6C2D9FDF5FE0B0C120C00040309E3D8BB9DC8D3CEC8DEE0C2DC15FC0A08F30103FB00F0FEF8060AFEFAEE05101314F8FCE7A5B10110F2F1F807081A04102B0B1CFED2DEFBF518EBE8FF050B1A14171DDAC403E2050B0114F810081617FDCCEBFEE0EBF0EDF5F9F4050900F9E7EF05DFD2FCF6EE09EBE6E2FAF2E919FC02FDF7F70DFCE6EADAE3DAF02E1A020A14180A07E5EBFFDA042040140821180419110AF203FE1F1A1D0F09F90010040EFF0A1816121420FC1319F8F3F50006F40F2414060707FCECF2000212FB040A020B030CEE0ADCE9D2CCD801FD0BEEEDE0D30A0BF3EA0AF90B07F2E8FADAE91C0AFFC7F1F80A0411F6F0D5EEE1CCCFEBFDF5F51019FAFE05DFE9FCD3D9E212FB05F31901F8F4EC07F6EB01E908030001ED08EEF5EE0202CCDADE0A12DFDFF0EC05EDEF0104F310D9FAEAF1F4F0E8F90B01F8F31321EAFCFFFCF512100FFD03F3161E4A0411041919111B17FBFBFA013240CE181320020A1A0817F916181941F509F1091607FE05FC19010F290E180602F802F1FCF4082A1E021139DDC2E5EC0305F3F9FF0308190AEE0CDAC2D8C4C4E5FCF4EAE9D9CC07FBFC04F8F3FEF3FCFFF2080D0504F8ECF9090517242AE5DDE1DDF41108EB1314372F22FFFAEAD1C8F605E70409251E0C120D11F6DFCFED14F00F101E1108160EF5E2E9F706CAE3031531211B1207FCE10512F313D30835252511FCE6F7E90E17331AF5070B292E03F7F8F8F9221B4115F4FD00150C03061512121E302A3408040403FD101508231E17022009EDF4F8EC040E080E0914230A15120B0FFEFF110A0603FF1A0B1211ECFDF7EDF0F50A110304FF07080B0BF9E0EEECDEE2FAF8E6DFE7D6FCF407F6F6F90702F2E1F100DAD91A0B09F2F0E8F50D14CDEAE9E2EBF5FEFAE2F9FDF8EBFDE0EDF5E5FCF9F3F5FD142207F3FBF0E4E9FC07ECE1DDF41C00E4E6EACCE7ED111003EBBD0D01DEC1C5CECDDEFC0C130415ECDFF3BAC3C3E5F5F10E0F0F1A29EF03152502191313191B19FF0C0C0529233E40322E271301FBDCE62FF9232720332B1713F4F4E2E404F4F6241826201117FDF6D4CEDB08F4141C0500FAFEF7FAD8E3D4DF17F5F8EAE6DFCCD8D7B8DBE6DCD6FC0601D7ABE7A6E3D4F4B5D7CEC6FF0008FD0901FE01FD0A04FFF301FF0604F7F3F6EEF1F5F5EFFDE2FF06000209FE13F3E7FFDDE4F2EFFE0AFBF809FF0404FDFDF9FAFAF2F6FD04F5FA021A070201FC0208090002F6F407FA0CFFF9FEFB1412050C0D000A041A1BF5F1EF09FDFC1115F3FF0008040C01EEF6F90CF804F3F4F70AF3F40CF20F0D0CF4FCF900F40D060008F50C0C1B0EED00EE020406F90500FB090509F7EDF6FBFB0A05F8F20506160A02FDEC100FF703F802FA030CF6F204E405FB0003F2F5070208EFF2E605FFFBFCFD04070A0300F3F7F7F605FD07FAF507F9FBF2F3F3F3FCF9F91F04FB02F8020605FFF5151B1E18151C0B07F1F7FEFCFB020C1313061D181CFDF209F301180E161A2122130C09E9E4F90A07FC181C2928343025F3E3F5F3F6FAFF1A33361D1109D4D6D8F5FBFAF2FBF002F6F1D9B7C2BBEB13FDF4FAF2F4E1B7BBCFD2CBDF261D1204FF0709D8BAE5EEE8FE182F0F14050405E9DDEC00F917213A2D12FCFC130F01F305F2F6062F1F0500FEF504EEFE110209FBFF0F0502F5F4F4FB0005F7DFEE0F1308FFFC08F3FA0307E800162706F106F5DDED0E08F7F8D30D080F1305080EEAE5DA0006D3F2FC01F20E0A0E0E010CFD0F0CF1EDEDE4F0F1040905FF13FDEFF8130FF0C2ED0001061A1309F1EB0AEBFAD8CCD9EBE6FC000CF7030602DED9CFD2D4E803F1F2FAECDE1603E2DEC8CCD9F7FEEFE2EBCCDC2002DCFAE4E2EB0B02ECEEECF5EA01F6FAF6F500FFFD0605F2F90CFA08F9D1E8F80001F5EC0D14110EEBFCF8FA0B07F7F2D0F7092516020909070105BBCEC0C2BED404FBE8E6F4040DD9B4B7B6DCA6CADAC8D2CCEAFD03EEF1101003E406EECFDB1E1AF4ECD412020F14080014F3E0F7FFFAC906F9F600FEFF0206FA1AEA0AF7F4EFEFD4E5EF0200030817F4F2FE1213D5BDD2FBEA0B110E12F7E10CEEEECAAFCDEAEFFE111316060BFDD2C7A1B9BDE3F7F902FDE0D5290AD6D3BEA2B4030DFEE8F0D3DD110AE8E9E5DBF2FD0107EEE3E6D90F08FBFC05F709F7F5F9E9EDFDF5FEFFD4FB120304FCEDF3FD16FE00F600E5120005E9CFF205250CF809F0F7FAFFA7BDA9C3ABCFF0F2F7FC04FCF7EBBB92AAD0A8C5DFDDD8D000EFF1FE07F0F104FEF9EC01F5FF00F4FA0B03FB02FB0914060A0AFBFBFAF7FBFB0911080CF7E5E0F4F905F2F91919131B04FAE1E4D3D1EF02070B161311081D221FFAC9D9DAEF060F030A23353C391D1503D4F3F9EFFF04080E043E201813FF00EEF8FF1103F001F913F5F5ECF80701F4040A1F0AF6FDF6E30FF1E1D1CE02FA0D0C1419221A1F08EBDAD6E2F9060F1A1E181607051CF7E7C5EBF6F50E2B212B45332F2D1AF9E90104F2F2042D3C493E332614FCF7F8F1F9F300F9F8F5F6FBF5EF03FFF2FCF3F1F20603FAFF06F3F0EEEEF7EEF6F909FAF903F306F00008F2FBEFEFF9F301F301FC04FB04F6F7F4F6F7F1F2FEFBF8FAEEEDE2E8FEFCFBF209FEEFFB1403D9DFE6FAFAF4F8F300FBFE1405FCF3E1E7F105FDFC04F408150F0EECE6E7F4FFF8FEEEF80508161F18F8FDF7020F050608EEF00B1E292F2804F5F4F2F4EAF8FD02FA121E1E1D15F6EAF0F8F2F9F50407F20006130DE0F3F3EFF203F504FFEF1009ECF0F2FFFDF308010408F8F1E9F9F9E801FBF8FEFD01FEFCF0F705F3EFFFF0EDF3F3FE0401EDFEF5F4FDF5FDF6F204F5F7F2EF0706F105F9FBFAFFF1FB06EDF1F0F0F7F3F801F9EBE5E1E8F8F2F505FDF3F90E05E8DDD2E9DBF6FEF4FBFD03090D0A1B161305E7F3F0EFFBFC131E312D2DFB19051E06EBEE05F00B19251BF1FC1A121619F5F4EDF8F40418F1E5EE011303E1F40203EDF20BF5F4F407F5DFE4D8F308F2EDDEF4FBF002ED0CEFE9EBEEFCF1E9E9E7EAFFF20F0FFC04FB06EE05F8F6EFFFEFF41B010BFDEDEDF7F002EDFBF9EE080CEF08FFF4F405F407FAF9F1F901FF04F4F5F9FCFA0304F7ECE0CEDECCD2DBF3FB0D0403EE08180A2D382C0FFACAC3DB09F307042217121726161AFDE9B2EEFA101E2B142624FD0BF5F5EFE5DAD307180A08100CF0F2FAEEECE7B3B50EFAFDEFEAEE0102F40AF9D4AFC1E4FED2D9DFEF131F2220FBBFD517EFC8D8F3F30F282D1719E9A3D8131B09F401060F1F100704DFF3B3FD1A33130E1828191106F502E3C4F50E2D241A09010C01FEE700EFB2F30809061109FE09FFF1F7E7DBC7092832260D18FEFE0710F1F9E6E409DFCF00F90B13EB0A0B00FEDD02FE0207FBF7F7FCFCFE04F7FBFEFCFA21170B00DAEE0DD4BCD0C9E6F1F7020C130813191E07F700D7C8FCFC1A111E0A1613111412F8DFD4F8EE15170906FB0801FFFAF1D2E1F2F104F3E9FB0612F3FF00E7F0DBF2E8FAE2DDEE0609FE0A12FF02DAF901FDCEDEF10C0E0A161108FBB5F40502E5D3E7EFF710180F07EDFDF1FF0C1206EDFB11050B0FFBDBF6F3ED2010150AF8FDFC03FCE8EFE0F6F91019130B070DF80105F7EBCEFC061A040F1610FC0AF00701FCFB03FAF91623361E150C161C1CEEEAFBFCF8F6D6DEECF0D4F5E4BAB8E2FCE4EE0616EFFAEE0F11F2EBE8CADA031C1A11FE1A031000DFEDE2F6D3F720181412081303020BF4FFD3AFFA221B06F8F80C24221E1CF3BAA5C205FFF4F90724241E281CFCD1B5C401E4E1D3FC1F14221A00F7D3D2F7F4C4CFCFFB091214090903E8B90F15D2C7D7DB08EF1D0A0401D4D40C15FDF5F206FF16FC16040FDEC3FD13200CFD000710061500FCDD9FF8FE0F0C0915FC12090BE9E5F0C929192F14101E1D0202FFEDECF4E004E0EE150C240504F51013E7CAE401FDEEFFEEFEFCFFFCF8F6FAF2F1FDFFF4F00500FA0EF5E402E9E2EC0304120A0B1C1007D9DED2D5E5D80C04231225270908F0F9DEE8FDDDF71C1E282A2D251F180E08E7E5CEEF1117383232272337291B00E0F4DF1223230C0D26222C350FE5CDF1E60BE5D3EDE60B23200FDCDAC70500E7E5EEECF7161405F5D2D0F5D2FAFCF8FCED1E19FA01FBDDF6DAD3070018151C060820050605EEE3C605FB0401071B1418FD0AEDFEF6FBFE14130F2115191B1D071013F3EA13F4122306180400120EFD01ECF302FAF4DCD8D9FAE2B8D9C8C0EEED03F7FE1412EEF9F0FAF3FED2ACF6FF0E2605F4FFDED7F4EBF2E9FBDBF30FF9FCF5D9E6FBF0F2FFED01C2021E1908EFEAE909181C0D13E7C4EE1117EDEF030A2D1E191E0EB9FCEC17FBF10406071C090A00F1E6AEE000E3AFB6B5D4EFEBD7E2F405A80DE8E3B190A3B2D7D3FDFE2012D7FBFDE0EFB9B2B5CDFB13F91BFFA9F908F1D9D5D2E40A05171601F8C3FFFB02F6D6F2091711160A0AE7D4F62DF210F70C1E32300C19F7F2F10CE5FC14E8FBFBDDFC23D9C6F802EEF0FDFEF6F4EF02F6EFF0EFF7EEF8FCF4F9F3EFF0F0F1ED04F3FCFF0802FD00FD04F5D2F3E3FBFBFDF40008EF0803F6F4F3FCFAF9EBFEFDF30508FC01FCFB0F0EF9F6FAFDF807081313220AF5F8F30E07E408FCF4F20D1E0501FBF2F7FAF6F5F4F5F80AFE09F1E7EA0BF2F0FBFB06F101EAF0F4D8E3F303EBF5F80602EDFDF4E6D6D1E1DB0001040504FCF300F3E3F5DFDCEB1309FA000AFDEEFA0AFB08F5F707FC080B0AF3F7FCF506FC030509F7F8FCEF090802F5EE010400FF05F90DFAFEF1F5EF030606FD03F5F7F1EDF801EFFB03FDFA0002FDFEFE00FBF3FAF5EEEE04000307FCF92A27380CF4F60402F3020BFD0B1A423F1CE0DEF2F200F90008FB1914242903DDC2BDFAF1FDF70F0C242D1FFEE0C2C2E6FBFD04FF0D071A111020FCF500EDF300EEF9FCEF111D253923101106FAFA05F2FAE3102D4D5E4B2BF8D7F4EC07F6F1EAFD27545B2D16E5D3D200F4FBFE00061328350FDBBCDCE5FDFAF6F9F90A1205FCE4E9DBE7F9F3F1EEFAF60E06F4ECE1EFEBFA0DF9FDFF010D0D120506EDFE1904EDF0F5F203FEDDE0F1EAE4E1EEC9BEEBEDFBF51A12040801090A0007F8AADCFF11F405140310FE0BFC020F03D005D6FF06F6EC03070A111007FECEEAF0FCE3AEBBC9E1F901FF0CEFB4F7E6F1ADB89BBBE9F7EAF4D8ECF4F3E602DCD1B6C1EF00FCE6D2D8FDFB1C2F01FCF6E0F4FC1504FAFCB6001D1A1820F7020E1011101105CCF80B1D0E00F2ECFD060F0C0D0CCC04311611F3F3DEF9F600F7FBFBBDFF060F020AE7E2D8E3F6EEDDFBB6F70DF71B08F7C4D2D0F8EFEAF2EBF50CE7C1C9B0D6DFC8FA02DBB8FBFE0809D0D1FAEEDDE5E5C4BEDEF9EFEA29100A0200001417FCE89CDA020BF91B140715080F021600F5D9F7F3EF0701E2FE060FF90209EFC900E3E5D8A39DC7EFFF04F5FAF8B2F1F9FDA6A89CA8DAEEF5E1EDFCE1F2EDEABEBAC3ABE8E5F0E3CDD1F0FE320DF9F5D3BAE9FA040FFDFAC5F9241C09FBECD4F7070D070603C2F5F42300F6F5EBF60506140312CC01360CFA01EBC5EAF003F4080AACED1F0202EDCDBDCDECEAF2FA01C3FA07FD07F6D1C8DBE1F006EEF7E8FCFCDE9EAFBBE8D6D0FD0AE0C505F7F408EFE2D1F5ECEEEAEEF0FF09FDF2F9F4DFDEF3FCF714190F050D07EDF8FAF3EAEAEB0AF8111E0CEEFC060DF201E8E2CFF40A23251B21F900F5EEF4F0EFD0F00C200B03EFF9FE040E1A1002E2FEFB0AFD01EF09EE0CFB09FC150E1018141708F80A13020A02010AFF21FB191103FDF6FFED00F3ED191905F80A09F0EC0A170C09F3E7ECFEFCE80A0C02F0FFF5020708EDE5E6C8B3EC08F302FBF5F3F6EEF1E0EFDDE1F91604FD080212EFF0F8E703F8F802FEFFF208FA0CF9F5FA061007FC0F0CFF00050301FF070AF8040501F2F208F6F40B050703FF0F15110AFF060D07F9FBFC03020A110210F703FEF7F9F7050805031201FB0B010601020BF6080BF6FCF1F7F2EDE202FC06F2FB05F6FBE6DF0917DDDD0F07F4F5FFFCFAF1E6DA0516DDDBF6030207FDFEFADCE6F90B0DCDE7F402F501FDF207F0E4FA08F2F6EFFA01FEF5FAF1FFFEF904F5FA0702F305020EF8F501F90F0AF909F0FA08F700F4F20A020A0A0B020D05FD0CFB0CF9070802FCF3FB1A130204F9F7FEF504020CF701FFFE0FF8FFFC00FBF4FA01FF0900F8F4F70000FB030905F4FBF6080A09FEFDFB0D060B07080101FDFE0D080D0105F3F70DF805FAFD090308030C19FCFB06FEFEF907FA040CFE040B12F7E20902F80C02FE01FEFD0B0F1A0CF6FCFCFB06F5F6FEECF4E815F9E8EE06FA07FBFD03FDE2FAEB0BFBF10203F9F500FE04FEEEF903EE0AF6101305F807F40101F2160BFFF9F703070205FBFBFA01031809000FF2FC03FB08F4FD01FD0B15080DF800021307FBFC0407F7FF0C1302150EFF080B06050C0AFF0DF30B0415FA12F2F6F3F507FCEBCED7B4D5B6D7D6D5EAFCFBE9D9DCBDB9DEC7C3C5EEC1D8E1F3F001FCF3080006EEE8DCDC050FF9EA0705F8F6ECC6BDB3B6D3FAFDEEE9DB0EE9E5D0C0C0BFC0E1E80A0DF7E4F5E0FAD4D1E2CEC6E5F2EED4CAF100FE0CFE01DEE2F506F5F1E4D6F11D160A141B0DECFF090DE3EF1AE3150D090509FE0D110605F4EEFEF6FDFBF2F7F1F309040CFEE2D5CDF5DF03E4D9D6F0FB04FFE9DEDBFFC8D2DBCDCCCEE9ECF40A0AF2DE0CD0E2F1FFEDEEF2F614FB01D2EC02D700E9C1F5D5E1D7F6C9EBEFEEF406040B060902FB0CFAF7FEF50DF0FDDBD4E0F4F50EFB21020DDF08F0F6F9F3F30B02161B1B1C20FA000AF3ECF0F4FDDAE1D0FBF01D140508F701EEEFE0B3DCD8DFE3040E0F07DAF2F601EEC3D7F5E2DDF9E406FBFCF5F7F4E4DB0003EEF1F1E3F20CFF0D17FB011A07F611260400FE0A170F0E0B1B0D151D0B16FFF8F20FE702060504050F1314130A09F20BE1F9FEF1F6F5FB15050CF9D0FFF0F5E6F9F5D7E8FBFA0701FAF3F4FFEBD7E9F7E1DCE5E7010CFEF708F90507F0EFEAF1E402DFDAFC01070BF7DFD0ADC5C0E3BBC1AECAD5DDE4C916CCEED1E60D020A13252F0CEAE7F7FFEDDBE9F7F505190A1307D4F8FAE0E2E4DFE9F50B3220FA14E9EF01F7E4FAEFD9F0F4F505F4F7FBF0E1F80405F3E1FBF7F2EDE0D7E2D003191714FDE8F3F6F4F6EAD2DB120B2516F9EA00080D0FF6F1F2110C16250BFA0503FD0D06E2FAD40DE4FE020AEEE7EDF3EFECF609C4F8E0F0FEF6EBE9FBDBF6EAF1CAE1F2C8D5EBEAE0F4E5FCF7091604E1F9D306F9FFE0F3F60A201603FCF008F7EEE8CBF3E1FDEEFBD0DDF50004030D050E09FE01F7FCFDF406F7FAFFDFF9F3ECE5EB1810F7E2DCE1FEEAFD0BE8FBE5DEECE403182CFEF502F1FADAC8BFD1BBE30627EE0FF902FEEBD6D1CDDEBCD0061B091AE4F8E0BEE3EDF7CFACDEFD04F3E106F0C2D4FD1715CBBCFE211DF2F1FBFAFA12091B110002201AFEDC070F1414080B0907070D1C1503F5F80107121A08FE07FC0D070C0408F2010C051012F1F4F3F1EDF8E0E8E808FDFAE9E8EDD8EFE8F4FD19EDFA00F8E9FFF6F7E8F1F50C06FBFF08F4020EF0EFE1FAE7EFDAE0FC050EFB03EBEED1C9BFD9D2D7B9CFCEE907EC06C8CCCDDEFCFDFD0E1804F60DD1FF0303160D312D252E1726F8F3D5FD050205091A29453034081DDCD1DEE0012423233835292106F7D7E7E6EF162636062B212610F7D5E7E0EE1E271D21E90C0E0FFCD6ECEEBB051116EAE0E40D0904FCDAEC02FDF80808E3E1FC00050101EDF4FFF603F9F2EBF10006F0FDEEE9D6E5EC01050F191208FDD9D5E1E7DDFFCCEDFF0D1711FBE4DFF008DEF2FBD4CA00050DFBFAEBF5F4EEECE9F7EACFDDF8EEE4F4FDCCD5D5FFF60CF504030CF300FFF3080DF8050C01FDFEFFFCF4FEFC0F06060908FAF8FAFA02FB14121818181B060607F904EB07231B1F2F28231510F8FC0D07F419171F0E17142A0E0704FEFDFD030405201D0AF70E110EEEF0FA0EF7E9F204F6E4EE03011203F80BFBF7EFF9F3FCECF51F10FDF8040C09FCFFFFF5F5ED080F1101FDFC080A0D0AF806041113F8FBFF04EFFE04001519F70CF81401FAFC09F90AFCFCF1FF0BF808FA0D080706F9F9FDF5F2F504FB0407FCF805F601FE05F709FBFA0DF704FBF7FA03F3080A0909F9FE0B0902F806F708F8F40C0BF50D07F906F9F9F40409F4F5FF00F7F50B00EDEFEBF3F206020C0BFB0504E9D6BBBDD0DDEFFBF50CFB07F1E1D9B59DB5ACCBF50CFDF6FDE6E4CED4C1C9E0C7D0F0080009F1EAECE6DAD9CDEAF9EDF7FF0CF3E6FE11FC1018E0E51E06FFFEF50917090502FF040BE4F3F801FB08FE08FA0BF3F5E7F2030DFA0FF2F300FB0E1A06DEF903061415F7F8010D05EFFDE2E6DC14161A1314F50AFAFF00F5F8F605070C0C0B03FEF802F8F8EA07FCFC0402EEF80000F708F5DAE7C9C5D6E3C6C4B0CFCCECFDE8F6D3D2DBEDF3F8EF0D0F1EFBFFD108F41C150F0D0804120BFEF5FA07FC1A192A260D021404110817F9EBF41B2D2914FE030F0702E2F7FFFBED102C2B23FA0A0F09FED6D50300E11211111010201700FCE8F505F6EB040F16051307120509F7DDFCF6EFE8FFFA090BF30A09F903E007D9DAD9DAF0FF03F20706F8E5C7F4EECEC0BBE6FC000612040EE9D80AFFDFCDFA0F1919291A1800FCE20900F4010F181F172010F1F1FFEA0508F2FAE706F202FAEEC4CCFFF4FFFADFD3B6CECDD1B9C0B1BACFEDFDDAF1D9DAD9EAED08E8161B06F2F8D408060508FC0C1A0B021418F5F8ED100F3E3B4227170A10041D1204F3FA1B412E36311B200F04FD02FCFBE6212C373011262003F9E4D0080CE622261A1F0F21161011EBE8F5F2F10E18130E0406160403ECF408E9EDD003ED08EE05FD0D06FECE0EDFE4CCCEE7F80102EFFDFBDABA0DE9D0AECFEE040C0F04F9FEDFC8FDF3E0C10914231115150E0DF0CE0200E1EA23241D1819FEF209EAEEFF00E6EBE3F5E9F3F8E8B8D5E5F1F7F4FB04FBFDFBF3040BFB030EF7FAFFEBEAF60B02131D07F7F40C04FD06F0FF0AFF0413081A0B1511FD06E5EE00FAFC091B0E2B46322CFE08E0F3E4D3EBF70D182D3E2B3B0506EBEDDBE0F3F507F407061023090CEEDED8DEF7F50A04FCEF0013F1F6F4FDF9E1D6EAF2E9EEEAF2F001001C303222120104F4ECE0EDE6F81004171D3220211703F2EFF3E8FE0B080C2A33230B121C0803FDE4FA0B0014172E1D1B121104FD01F4F2F6F8E7EFFD273A332C240811F4010703030604F808010509F405070400FBF909F6F4030909FDF80BF807F4FD06F904FDFFFCFEFD0C05030AFC02050C03F109020AFD01F4FBFAF40DF8FB07F1E4FA1BFEFA00ED0209000709FCF6FF343227190AFBF403F50400F0ECF51B322B1E10F602040C0D0B01E305303D212A1509F8F6FB092F231A0D1E1B1A030AF70C0E0C0925343113261E0EF7FCFEFDF4FCFD07302B111C0D02FD0903F50302F1021415100501FF0C02F7010B08051004F60DF8FCF5F204FD0DF5F5060400FEF6F705F2FE04FE0203FCFA020AFEF2F50BFF00FF0E01F504F4FA06F5F6F60FFA04FBFCFB06F6FBF9FCF7FFF4F9F408FBF906FC04F90DF202010B1A150A050608F90303EEEFEDED1033353A1C17FB070A03E5E2D3DCFC1F37380C0A07FA0109E4DCE0E9F6FC06010916040C0308FA03ECEEFEF7F1EBFA060E07FC1314FC0C1B0DE6DCEDFE0108FE050CFC05171C03E3EEEDECF6F90BFD0C0AFA021808FEE5F6FEFAF7F5080F07FDFBFE071302070204F5F5F4FB00EDF20DFA09FEFDF2040EFBF5F602FAFAF70BFEF5FBFA06090DFFF80806FD06F50BFD040507050606E2C8EDDDE2D6EEE0E0EFFA00F0D4E1C8E5DEB4BEFA0105E4F0F8E6BFE7DEFCF2F2F4F8ECF8020AF1FBB8F203FF10F709020200FF1912E0B8CBF8080BF9151F181CFD0619DFD3E4F20C0803242E321D171F22DDCAF81E12FDFC1B1E13FDF60D1EE0CFFF24130D08160BF6F6F9DCEABF0F0E0F21262103F603E8EAFCFAF80F1A1F1D0FF1FDF3FC06F610DDC2F8FF031213FE09FEFF06FE0FF0D0EBFCFE0E0E08020703FF0E0FFCFEEE040014251F0E1500FAEF100503E4CAB2DD08F800F6F9E8F92D0404090505F407F5F9FCFE0703030E05F5E6DDFDF1F9FB18ED050DEE0911D704E6FDE9D9EAEAFB151AF6FBFBCBF0F10A05EBFAF0F8F90B2306EFDAFF01101CF5050B14251C1714DCE9EBF81515070C140F1C133614EDE2E9FD10FF0D130C0B020018FAEBE0EA09110F16081202FAECDC03E3F1F7FAF5FCFAEA00F9EAF9F0FAFF0519020303EDF1E304EFF4F7F40A05040E0808FDE7F4F2F303F804D2F5FE0C22151E04F503F4170FFCEF040A081C0A0E0703FDEEFF0605F9F1E1E5F50A16131709011C2C0701F3E9C2CBDAD2B1F910ECDAD2F4E80BD1C2CEDCF7F3011E05EB0615CEE3C2C9F3E9D7F902010AFC0D1A01B1DFE4EBD9F6EAF1F3F90E2503C29CF0EEF7FA03E7EDEAE1FC202CDFE8ECE5F5FDF9F7E0EBCF053519D1CAE3EEECF6F2EDEADCC0E61E19C9E9DCDDEF070FFAF1E6E6F2E8FBC9E4EFF8EEFA0D03E2ECF515F3E8F5FC17F4F10700F8F61308F8EDD6F3F3141707FCFD1907140E0CF5C7C502DDFD0D13121F200F072FFDEBE0EF0019FD150B0A040004F8D50803F0D9D6F711FC09080BE8191DF0F502F1F100F9F1080900070606FE0AF703ECE807F4E2EE221707F804F401F0D7E2F8FB171A2D252A0DFE07EFD5C3C8E2EB022A3740261A10F4BAD0C9DAD7EBF4233127251B10F9D7CFDAE4EC070A10ED09132B0FF2F4FEFEF805FA15EED7BAD7EB12ED03291B01001406DABEC7CFF9FBE4001FFA041202E8D7D8E50105F5F40E2614F70400FAF5E2F3F2F6E3FF091D11110EF00401010811EEFEEDFE17FEFF090A0E010503000A07EC1BFBFE2401161E160814061BFCFD02E6ECE41609010700090BEC0BF408F2F1CCEBD0C2F207F7BCDCE000EAF1DCBCF5F7E4180A0AFFE610F4F3CFE5FB03EFE5071918FCFF0F06D6CCF8F2EE04E8E8F8F8F61004E0C2DDE6F4F3E9C9B6A7ABBAFC13D7A3DFF3EFF2E8CE92818C930217E6D2C5C4DAE9E6C2AC96AEAACD10ECBAD4BFADDCE4CDBAD7CFD802F8FBBDD0C2B2D3E5DFDDE7EEF405DE080CFECBD3E1D8ECF40300060B0AF1EEF0D0E8E7F10404100F140DFCE3C903FDF7F50EFE0B1224181904F30AE8D6E9FDF6110C21191F19EFFB0AAFE7D1F210E802E51004F1F405F9F403F4070CF8FBF6010C0D0A09F602F5FFF90E00070C0403FDFAF5F6FFFBE9F2E7F310211C0E07FEFA08FFF5D8F7F6F6F80E0CF9F9FCF4050BFF02ED02F7E7E9F1EDFD090800FBE9DDEAFCEADBE5CEEFE4FEFEFF0EECEEE2FF04E3CED7DCFD0C0A061B00FBF41207E7E2F1FCF8020D0009F4ED070AF6FFF6F907FCFFFBFE07E9D7D3E7EDF20A080710FC0C030A04E8DCE4FAFA04F90E0616090602F9ECF8EB0801060A090801FCFC0D0AFE0801FE02FA0E04010EFBFEF9F7090508020CFF04FC090B09FDF507060E0CF907F8FBFDFCF5FF08FCF60C080203F7F6080A0AFAFEFBF7F0E7F3F0F2020C0A1401FD0C08E5DCD6DDEE102013240AF70102EDF9E9DEEEFA35363C2109FC00FEF1F7EE040A133D5462381AEF0A0AFBF6FC051B274F56533B171402FEF80E272D2B192B363D2110FCFFFA0A1D26462C141B20070806F7FAFF040E0F392D231709FCF1F7F00FFD061A0C1DFBF6E0E9D2D0EF03F50AFE0E101F09E9DFE2D3050C12FCF50E0F03110B01EADBFAEAF917030708FAFE030C0300FF0708100D040706FFADDDCDBFC1F913F9D7D9F500E8CED5CEF7FBF90602F7F8FF1109FDC7F7F7FDF1EFEDF6F8E4F70AF6FFC0F9F205F2EBE6DFECECF908FECDEC121B1B0EF1CADFCBCAFF1801E0062221190C0902FCE6C5DE1AF8E3FA0F0B14091503FA09FCD701F4E40F01F5FBEB0A0EFF090F03DA03E00F05FEF2E8EC0310070E1DE709150D13FAEF04F2F8020012170300F5FF02FBF6FAFCFD0CF3080F0D06040204EDEAE0EDDBE3F2E6FCF0FDF2FEF9E5EFF2E6CFD1E3F2FC11FBFDE6DDC9BDD3E3F0F1F3CA1AEB08F4F1BDD9DCC3C8F017F2C5D4F803E3D0E0C4F9F9FBFB1613F7EFFDF6F3B7EFE2FFE8F2FD01F7E4F0120002BBEC0DFDF8E8E3D8D6D70A060BD3EC171F1D16DBB5C1B5B1F00A0EE6103127251B03E6EAD3B2DB1AF9E2EEF4F4040D18F60801D1D0F3F5DBFCF8EEF603020A0CFC00FBE8FFDB06F6E3DCF301FF0E03030DEB02FB1006F2F2F3EDF8FD01FE190C0AEF04F6F9E6F0F801FAFE1324F80D070202F6F5D7F5F6E6F40911FD05EDFDE5CADFE1D6DDDAE9E8F8FEF8F7F9CAB5C4D3DBEDE8EBD515F003010803FF1B220C110F1C2700030CF910001E19110911060B16F8FA09010AF0EBE5EFFC0EF8F5FA0A0DF406EAE8F2EDF1EFE4DCF0EADAFBFFF7D7EEF9F8040E100E0E0201FAF8F3ECF603090B3133260E14FD04F6E0F0F2FAF2F82F371A1305FB04FBF5F5EBEFEAF53E200D0602E5FFF801E1DFDFDBE4050E0607F8F6FD07F7DCBCD9EBE4E4000002F3F9F2F2F7E0C5D4D3EAFF111F1BF3070403F4F7EEECDCED0F0914FDF3F2050AFD00F403F805FD06FEF907F603F706FBFA000EFE09FAF907F502FA02F8F9010BF703FF0C040FFB08F7FE080C020FF002FAFCF4F1FCFEF7FDF30100F9E4F8FEFCFCEDF80BF70A05FAFAF4F2DD011112150BF9FE05F7F7F5F8F1EF191D1D2403120A0B070204FBFEE50D2A30130E04F90A0601E6EBF7FA04342A0DFFF407F90708E9D9DBE3F2140DF40200F304FA06EDE7CDD5E6FCE4FAFFFCFCF8F60AF2EADFE4E6D9EFFB0604000D04FBFFE4CFF8DCF3F2F6F4F5F7FA0002060FF8F8FAFCFCF3FEF7FD080A00020310F901F7FE02060DFA050C01F5FAF4020806F7FE0A0B000305060000F9FF05F7F2040000080CF5FCFEFB03FDF20507F500060600F7F501F20605FEF9F5FFF2FE050800F803FE09120E160F200E030B0A0CFAF500120E14272C1D1A07F908FC0A02EE03EB0A261811F8F3FBF70EFE04F1EAE6130EF2EDE1F5040D031102ECD7E1FEE2F2F2FC0901040D03FCDDD6DEE7F7FEFEFE06FB0A0E08F8DDC1DFD41021FD0CF80701F50EFFE6E1D3FC0C140508040D02F4F4F9050D0BFF0B0202F7000CFBFDFFF907F505FDF5FC0E0808FE0605FCFCFAF9FA070705F308FEFBFBFB103022250EF00F271F030308F720212B20FA0BFA03010630051407EEEC08DDD2DCEAECFE061900FDE9DDDFE0CBC2C7E9F7FA0B111A0102CCD7DEE5C4D7DEFF070C0EF5EEDBBABFE0D9C6C6DFF40808F5D8D7FCB1DCE5E7D7DDF2050B0E1B08DFF0A7DDE2F8F5F10418170C120AE9E3D3EE00F703F7FC1A1908FD15E7F7E3E6FE0627130B0B0900070B0AD6C4DDF6032220270D19FEF208F2FDCD9FBEF50E132012F6FDE9DEF8FDF6CDBCC3DBF5F504FAF0DED4EE0BF1F5D9D5C4E8C2D7DCD6DFF404070EF6F80B0E090B08FC0E0CF603EBF8121D1F0D25FE05291D0EF8FE03F7FF15FAF9EDF0E7FFF9FF0F0711F5E8FFEBE7D3D3EEF3F9F90812F7FBE300EED4DFE4E5FF08FE0A05F8E4FC0BF3D5DCCFE7F80BEDA400FCF50806FBF2E8EC0206111BEBF4ECD009FB12F4F617191415110501F9C2FBFD0B14F019130F0301FFF5F7CEFD080A15FFFE0303FA07FEF6F3D6EDF408150D111C07FF000C05F0DFD1ECF406111B140A08FCD8F506E9BBDBF4F001FC01FD06DDCEFC0BFEDCD2CED0D8CABCCADBD4E1F2F406252D4611331D1B24253B05E813DF06201F301613000A1015F6F2F1E1EE0605EE08091C0908020B10FAE9DCFC0309F6030B0FF6FAE5CFE9F4DDFD0503F1F4F000FBF3F5D3E5BEDAF7FFFEFCF7F5EBFAF7DCC7DBE3FA01F7FCFF0801EDEE2905E1DFBEE50308FCF206100A1C1709D2EDB9E1F201F10E140B10241403D4EABFD7FA0611FB111A0A0903FC00C8E3E6ECF31A180E16050A0908FBE9CAA0FE090815FCFD10EEEBE3ECF3E1D1C4C8F0F50701E301D9C6E104EDE0D6D2D5E1C4C5C9CBDBEFF1FF10F90401F9FEFB01FDFB0F00F700FFF7F4EB081D1A1B121D1C1205F6E802E6E9F0EEF90D0A040E02FAF3E6EFE5E5E301F70D29150A040EE4F2DAD0E6DAF71C17101400EEE2EBE7B7E2D7D7E7160400F7C6C4EEE4FDD9EDD3D0FE111D05DEEDFCE8F4FDD4D6C9D0051817FAFA07F1E6F7E7EBCFC2D7E70914100A0304F8E1DCF5E6E3DDEF02171F0BFE090DF703FDF5F90A091320070909070AFCF2D2F601101301FE120CFCE8ED0701CBE3F5E9E7EBEF0FFED5E2EFF3EAF1E9E7DBCFBECDD9F5DBF30B030B240E271A2E241410272B11F3F5F701213C272D322C21111D36F6F5F902171A2B180E10131302FD12FCE311071B20241810ECE7E5F3E0FDE8F8022012161DFBD1D4CCC7D0EFBCE70C161B191CF5D9C4CA11FFFBCCD52A091A34080AE5E5FE21FFDBC6E90A22252D1E09F7F8090EF80BD7D9041623190B0E1D1B1415F3F9EED9F6F4FD19042311F710FAFBF3D2D2A1F1F60313040A030A0AE600D2C7DEDEE3D7E601EDFEE7C80FF3CDC0CCF4CEE3D3E8FBD8BCDCFA06F3DCCBD9CCD8CBCEDBCFEEF4F301070C0900F5F6010209FF0EFB09F5F7F102070A0A30090BFF000DFEF4FCF4080D1B190A0A010CF4FDF8F4FAFD0A0B0E171A11FFFCF2F50102F3010A0608091CFFE2EDF1000101FAFD05F8EA031E04E8DCE1E80AF8F9EF03F9F20A04F6D9F2F2FEFBFA00EFFFFDF6190903FB0DFB02FD06FEFD1600FA0BF6020110FD0D0D0503040A01F3F8EF0B180F0BF6FB050B00040115080F07FA0D1007FD0AF8FB090311FB06FE010105EE08FBF8FAF1F6FAF2F9FBF20904F2F402F6FDF7080602FCF2F90BFD0405F80AFFF90AF8F508F90502FBFD0C07FB0DFD05EBECE9F000F806070AF90B00FBF0CBBCC0BCE0EBFCF3FAFE0104FBDDD9BDCAE0FF020A0D09F40BEDE6BDB3C0CF0B323C2C0504F8F4E2EDB28BC3D1113A35F7EFFB05F4FEE6B480C7E5112326F7EE000CF5FFDEB58CC502EA04EDF9FB0801F2F6F3CAB8E30203FEF3E9EAFF03F3E90800E4E30716F100FC06FF040808FE0B1E1407EEED0112FFFF02FDF30F202A26160203FAE906F5FE00E4FC000BFA0BF7130BEF0605FD070CF7FC03F7EEF700F7FB0002F8FA120D2F0B20230F0E3136FBEB0CEC13061114020A040A1B131FF1FDE50A020A0EF4F6ECEFFAFF210D06ED010EFF02EAC5D2D4E4F1DC05FCDE010D07F80BF0C9BEDCF1E8CCFBED100D0B0BEF04E5EDF20411EF09EF0716FDFCFCF4090601151EFA03E0D2210A041E0E14FE1410191809E3F41C0D04211B241E12090E1CFCF4F11318121811150D130BFA130FEAFDE508151E090104FBEDE70AFF07D7D806FFFFF9EDD1E4F0E3EDFDF4F9E8D5F5F0CCE6E0DADFCBE101FF05F7D8D3DDD2C3CFD2D2E4EEFB080E2A301623221D232337FDFBFFEF172218211B1C070A10221CFBFFEDFF1E141AF3F0FBF0F4061305FBE7FE1A0C10F6DCDAC9DFDFF4FF06E60E1D1A0E13F0C4B8D7E9D6CEF5DC161F240305F3CAC3DAEA0EE30CDC081B120A09F0F2EFFA0D1B000EE2CE2F1017231406FC0F1A07220DECF81E1A0E2413120E0A0D052BFFDFEE1D16230412080E1201102207DBE9E909161B10F9EFFAECF6F3FBF7CDBFF701ECF6E7EAEBF2D4E309F8EFE9CAD2EEDAEBD9E5DCCFD90005F7EDC3DDEBD7CDD4DEE8E8F9F8050AF8FF060AFE02080E080509F8FFFBF5E5DFEAE6E6CA04FA10FEFB050207070B0B00FBEDEEFCE904110A13060D1B1D131B0C150F0007061022191201060C1E12101AFCFD0D212012FBDFC4EA11FAFDFBEE15071D16EEDFF7D2F2F802130B03160007FE041B18F8F60C362103E9F711F1E8E92D08FF03041F19030801FDF2F600F6E201DDDF010E080D0002F803FFFEF8E8E1D5D4F4030AF80A02150DFBEED5CFB6A5EBF60B0E0B16F5F60BE3E8CAC6DFF610FC06FD1010020B0407FCF9FD0DFCFE06FB000B0308080502F911FE020E01FC0103FCF900FB070EFA04FA0F0406080402140A080B091903130F01FBFC0B1311FE0DF6F6060E00FBFB1202FD0009061601F40F0B06120E0611F809101315F9D4F4F6FD1000FC08000B181E1DEFD4F1FE03FEFE0D0601FF282F1309EAE10E0A0B1108FC01000F0E1A12FCF90400FE100D0FFF101218181E0BF50D11FCF8040CFF0F0D0113F80FFC130C110113070905FA150AFF0300FAFD02FE0BFE0AF500090F0A0BFC11FF0B03FA100314F80607FA080001FA05FD0F0213130EFBFE0EFF0802FEF90E02FB0B120504000EFFFF0C040110FA0F080E030B0D020C0204FF10FD05080808EE06070604FF060304070F0BEFF7E7F20F04E2EFF70EFFFB0EF7E906F417120BF8EEFE010E0D120D06FA24342523FEF6FBFD090E0E16131D374A2202F610F9F50CFF00FD0F2D371B0AEAF51310F4F6FF03040E10191E07EEF6081AFDFBFE14090415250404FBFDF81303FC0D0804FA130E0605E3F5FA110C0705FA02060B090AF7FA0805FD0510FF11FA0B0E1217FD0F070DFC0F0601F8F8F0D2DDCAE2DCF4DAE7EBFB0A05EACDA5B7CEBCD1C4C4CFE3DEF402D8151CFF1407E7F1E4E3C0D6F0120E3716271B0A0BF7F1DFE5B7CE272C192F32160B0309F9E2DFEACF25051F1D1108F40700F3F707F1EE392416FFFEE9E2E8EFFB0901E3ED1913FADBDCD8BCE2F41404EFDBE3E501E1DFE6D3D3E6F71110F6F4C619DBFBD5E1DAD6F3081007FAF5F6D8D5D8DBD6DBDFF7E1EAFAC7D5CDDAF3F4D5D7DBEAE8FDE1E6D1C1F200181E10EEEAF50AF6ECE8D6BAF100D90AFB1CFC140514132009D60301F9050B100B0B050D0A0B1001F901F4D6C1A7E9B494A7A904DAFC0E03FCFDF4F804E3CFDBD0E8ADDAFA21F6283810271005F6F5E2DADEFA200E0C051103080E05F9DEDCDEFE1522131814080D1D12F5F8E700051217120503F7E903FFFD0601EF12172A15FFF4D9D7ED0B1502EEF406FA08E7FBE5D7E2DD081F06FCD6FDF6F4E8DDE5F203F20008FEF2F40206FCECE6EAE8FBE4E7ECEFE8EAF8E902FCE4E5E3E5F6F3EDE3DBD012ED191B07EAD6F8F8E2CEE2C9C8F9F2301201061304F90F07F8F3FE040C05F6EAE1CBD2DECCE2C7E0EEF402E3EDB5919AB7D9CD80C7F0CAE5F1FC0309EBDDE9F9EDFEE4FCC7AF27F1EE0C0DF3ECE7FAEDF3E1FDB7260506FF0BFDE0E0F0FB1512E1F3181E190409F2D9DAFD18F8F4F206132B1C04EBF2DCF600FD18E80305352107E909E6D6EF0710F2EDECE2E711E7E8E3E4EFEE090A0B0CE8E2150BE5FBEEDBF8F0F1F502E6EDD4D6DBFEE5F2F907F4F1F6EDDCCAEAD3F90209E8F4F3F9D9CBCCDFCAC9EC2114060900F9FFFAFFF0F2B9DAFAF1050D170210FB03F81107E90D07060E1512121211061014FB0A0809EFEAE4F1E7F0D6D6D2D1DFE4F0F6FFF5FCF503FFF2EAEDD6D8BFD9FE0009000A030D0301EBF2F4DFDF1D0EEE050F03FE0A0CEDF301F2F50E03050308060BF419F31401E5F9122115192429E4CE0C0C0BFEFB0F1419131B2D0EC2C4F80C110F0DF30102080D27FACACCF91110F700F50BFA1C0C01F2DFF7FE092514FF000FFDFDE6F3EFE7DAE8E1F5E6F1F7FAEFF4F0F3E3E4E5E7E9E7F4F3FBECFE1A03FEF4ED04F6E0EEE8D0FCF317F0000E0DF40E00050D1C0C0701F7F501DAC9D8E8E6EBE5E1E10201F9F3B4BCB5A4C2C69888FDCDEEFA08EADAC5CCE0D3F5E2E0D6BFCDF6F7E8D1D9D2E1D9F3110DFDFAD92EEADCD9B7C9D4DC0D16011EEEE72E18F4E0C5D3D4DF16190C13CFE51B170AFFEB07C7F2101415F5C5EC203A19152425D5000716FF160CAB0213032A3D1AE7020E0B14FFEBCC04D30AF800171513040216EFC8DCF703FC031D141C03F9FFF2C1D4E9E2C905432B150D07FBF8D9D8C3D705DC2B2F1B1A150F0B040B00E4F90914130E201C120B2B010A28F70110020D0DFD0F0D0F000605F9100310FCFE0D0405F80B0CFD0B100210FC0EF9EEFAF4FAFFFC04F6090BF90701F9F0FAE6EBEEEE02011409F6010EF2E0E8ECF8E8DF05F1FEFD04FDF5F9F3FA1509060E030D0DF9FDFD05EE061627230B13FC090905FD0C100C10242F05F3FA01051AFCFEFB04FD193C1BF6E0FE110412FFF6FD030410201DF60A0002FC09F31107FDFF100B0A070600FB00FFF5FC100FF20007FE060A01040207F50211FA04030C0201FEF50B04FA06F7FCFE000016020E07060403010EF8FC0BFB12FAFEFC110EFE020E010CF70DFE000EFC0712FC0E0DF803FA00070901090D0F140F181702F910FCFB1A1F21282E26FBEF1104070F06F20F2A31271907F1C8D7FBFDFF02041022240100F5DDC3D00100130F1DF80F16EBFF1504E5E8090D0A15150CFD11EBACFA0E14EF0A1C0BFE0801070CE0C6D0F1F8F2F6FE07F70F06F5FEEDDFBEE9FDEB0B05FE030B0500F1C7D2CEEEFAF8FE0C0E0907F6E0D7D3CA0100F6FEFC0C09FA150EF0E7E1EAF80FE8F9F50902110FFF06F8FBF705F50D0311FBF8060502E6E4CECCDBCEE4CCD2E5EE15F3E7AC9297D2DCDB9CDBF1CDE21328F7FB08FA0CF305F6F5DAB1BA071A1C252933160D0306FF08F7C8FBFE1729211709E9060CFEFFEEEF1004F105F7FFF5E7F8F90100E2C0130DEEECD1EFEDF1040AFA09EDE00EF0D2D5E7D2EBDFF60F101004BF03F0D2D5F6ECECF8FE1312FFF4DF0AFBDCE6F8F2F8F0F900F7EBE3BF0CEAD9D1E5E2000405FCF2DEC7D505DFECCBE1100B0AFEFB06F3AFE2FF0004FB12071F141D040204CCE419001EFE170104221EFD1019000213F302F0D3CFD7DDD8D6CBCFF2FD13F0DBB79294D7E0D185ECE5BFE90929FDFA0BFCFCF700E5DFD89FBA0D2C1524231B0DF9EE09FEF2E8D10509021D101CF3ED02020C0BFCD90C03F5EDD9DFE7F1020807FFECC81705E0D9D1E3F8ED1005F8FDDCCF02F6DFE0D8E4FBF0F60B1218F0BE06E4E8E0FEF9DBF9F81609FEF0D70F12E7F0F7F1FE07FAF8F4E5C8D205F9CEDBE4FA0606000101DFCADE07CBD2FA09132911151300EDB1E908E80E1F31172B25180C1009B5E20CFF100B0819072910FA1817EDF90501FAF3FDF9E9E7F8EFFCF403F1F6F2F20904F70202F5EAF5F8EFFBFBF60311090B0B14FC06F9F810F4F904F00505FB0B110803FF050A07EE01E50CFF0B0A06F5031101FDFA00F6F9FCECDFF2E315222415F704F003E8EDE6E5E2BD051C20EFCBF3F1F00EF8FA08EAE703F7DA0101FFFBECEFEEFC0103D9EEEAE4F8EEF1F1D9E1EEF8DFE8CCF1E4DCFBD5EEF5EEF5F0E0D6FCF2F7F1EDDEE904EFEDF8CCEBF6F5141E08F0DEFF070603E7F1D6FBE8000801E3EFEF0501F0F5F6FEF3EDFFFCFFEBF9FBE7F6F0EEEFEF00F1ECFFEAEEF5FAF0E9E8F6F7FEF9EF0806EF03F5F501EBFCF8F4FAF9EEEDEDEEF004F5F603EDFEE9F002F1D1EBE4FAF9ECECE9F6EFE4E9F3F5E4D2DBF0F3EFFD01E8F8F6D9E3E4D8D8D4E4E4F9FAEBF8F2F6DCF2E0B1D2F9F1E8E6EAF4F1F9EEE3C2B9D3ED01F704F6EDF303F9F0C9A8BDCCEB0608FD00F9EBF4E7D4D3B7BACCE7F9E9EDF8FAF5FFEFDDCCB0BFB9E0EBF4FDEDEDFD01F2E8E8DDDFD3F6F6F1F3F2FCFC02EFFD00E6E9F6E302EBF2F1F9FCEFE8F9E8FEF3F8ECE8F6EAF80200EAEFEBF8EB00EDE9F9FEEAE9E9EEF70000EEFDF5F8EFF301EEFAFBE802F9F7F9FF0902FFF7F0FF05FAFBE8F4F7FAFDFBF2E2F0F4EDEAF400EAF7FAE4C7E0E3F016EFF3EBE7FCFAE5EEC6CECFDC062600F4ECEEFAF9E8E9CBC7B2D516181C0904FC02E8EDE3CDD9CDE805180209E600F703F9EDF5F0CDCF00F5EBE9EBFEF5ECFBF1FBE5CCE6FADAF3E0FCFCF7FEF8E5E8E3F0FA07EFF4F60000F8E9F0F5EAF0141CFDFFF903EBF6FFFDFAF6E8F4FCFFFEF1F0F4F4F801FDF2EAE5FBF1FAF3FFFEF901E8FDFFEFD5DBE1E8C6DAD9D4FF01FEF4DDE1B88BCBD0FA0D010CE2E3F1E9E5D307D20C0820111815F806F0C5FDD4E3EDE7F61A121A1D1207F2E1000C0A111A3013092015020C02E20CF8161F433F1407E8040F1105DC0C091E403E3B15040E0E2213FBD1D90A02210B35160F1D181D17E6E5FEF2EBF00510122E1F100CDDDFE1E0D4D2E5E926141703EF0203B8ABD6F4F6030105150CF3FB08FACCE4E5F50F13180E09FCF7050FD9BF0BC1F5E6FA071107EAFA1AFEE8DDFED9D2E4DEE1EFE6EBFED8A6C4E1F4EBF4FFF7FBF1EBE7FDF3FEECFFF0E7F4F9FEEEE806F404F8F116FDEE03F20A07110A16250D0621F4EDDA040C03F509060D1713031919F4EB04FF0806151DF9150F1011EF00DB0CFA0EF9263C180C0E192B0905E7F00B161D1E2A14EE021809F8F5EFE804FF092115FE170E051707F2DCDAF7F10811110A140D1D12E0EDD0E2F1F3FA1022101602EBF5EFFEDEF0F7EBF4081D03F804F9FDFDF0DFDB010DFC070016FCFBF4ECDEFFEEF2F1030000031509FE131501F3FED4DDF8EE0707FD06FBDCC3E6F80A06FEDCCAC4B4B7C6DED3C0DDD6F7D0D2E301F60AEE0CF1F0F2E401EBB8E1F90705242C130C0BFC1EEAD3F1F1120B121C1D120D0BFF0704C0ED140C1513150919160D0A15E4DE010E0E04F80618161F2C2A1713C502F209152F13190B1A2023000BC4E4F51E131F2F181F0B0EFC0BF5D3DB0F001B182112FFE201EBF2C4E3E0F716142009FAFCFC01EFEAE8AED703F8FEFEF8FFFD100406EBC3BBF9FEF3F00D10201BFE03E8E6B3FDCDE8E709FC0C1C0F07040007E20AE8C6E7D6F9F6FB1001ECC2CFF2E9F50001EDFAF9FCF0FEF703ECEB05F0DEF5D6CDF40E04FCC0DE01F9EDEDCBD1062C231F1A1307F4F103E2F8F9051C10061C1106FCFEFCF3E5FFEDFFF9FF100C160C19FF0A04DDDEEAEDF9F5E9FD24281F1E11FEDF150AFDEEE0D4032D39241D09F6DDF70E06F50BEE0B1C180B00EAEED8EE1709190404FE0003EABBE9F0D7EAEA05051001FDF3EAD4F103E3E7E0E8E3E8FAFC0B02FCFFF8EDD5E1E5F9EDF9F7120D15000201E8EFEE09E3E1E9010200FDFC09F7E7E4EAED01F2F5E6EDF0E2FDCED3F203F8F405ECC0C1CBBDB6F7D7CBECDB04FAF3D2F1EAECE0F4F8C3FA04FB03EDD0F013FFFCFE170E07FEF4FAF5B804FD2515031318F90BF11303CFE805212105040B09020A191DFBDFE00D0607EBDD16332824190FF7E101FBD2D0D8FD1D2F37291D09F2E1E2DEDEFE1F2E25F8FFEFEEF5E1F7FEE13844443C07DBE0D8E20E9AF0A6FD3839362FFFE5FD061B16BEE5A2F23E1819190415071818EDC6F99A06EAE8F817252C141B23F5E105DBF6BBD9D9F005341E0BE7C2DA08EACCF1EEF4DBD9C4E78EBDF701F1ECEFF8F6FFE9F3FEF0F0FAE9FAFD02F7F1FA01F4FEF9F0FA00F8F7FCF1F5F707F8FCF90102EB03E3ECF8EEF3EFFF0206FE050604FEF5FFEDF1FBF2FBF7EB02031117F60500FEF1EFEFEEECDAF515171B05FD01F0F0FF03E4E6D8EA07FFFF03FAEEF2ECF9F101F9DE0A15F3EDE6EF02ECF7F9F60B15FA19FDFBF9E803FBFBF1F31E1C2710120E0EF5FA0BF4F8EBE4F0F514FF1B09060CFB01F2F3F407ECEFFB15FCF8FEF1050AE7FBF7EF0AE110F711FDF6F6ECF5EDFFF701F1F1F5EBF4F2F2F0F0ECF9E6F3EBFAF4F8E9F6EDE9E6EAEAFBF301F0EDFAF6F4EF00F5FAF802FF00F901FDE6F60EFBFBFBFCF5F0EEF5F4FEF6F301090CFB070B10EAFCFBFEEBF8F5040B091404F9E8EDF5FFE3F4F708181E3001F403F8FBE0F90BF608171212EEEFEFEFE9F2F902FA05F7F7FCD8030B080E0AF0FFEFEC08ECCDCCDD0D383C25F9F7E902F5EFCFAFCDF81F25FCF7F9E6F4F5ECF4DAEDF7251606F4F8EEF2F7FBF4FFFF0323290CF501E7E5F3FBF304F206FB030FFCEDF5FCFFEBEBFFE6FCF3FBECED03EDE2F7E8F3EDECF802BDC9D4C2B8DDECD9D1EEEBF9F1D9E30C14F60202EBE6F5060FFDD0E7F1F0EEF80E00150200EFEFF6DDD1D90FE8EF0F070BFB080CF403DAE9FFFF1016160B010CFF1C13F7E8181A1620252C0CF50DFA1717F9D80D2B29302C1E02F4DFDBEAF8FCE3D804F913301914FFFBEEF407FDDFEBF5CD010D0D291D0703F9FB02E0D408EFFD0C27200A0E0618CB04E1ED25202014190C0B03140DB0FAE3EF1636251B1302F601000CCCF800DCF50B05EAE6F8F90EE201E1EA02E7D1EBD5C9DCD9E3D6CFBBF4F609F4CBD4CCC4A4CEE4C7C2F5DBE9F7D1E4F912F5F3EEF9EEF5F805FFD3D2E7EDE6EB0D090F0602F400EDD3E6DA09D702FD0D01110CFC0AE7D7FB0B0B021B130413091300FEF7E51831272228260FF00C01160FEACA0E281F323024EFEADFD9F602FFDBEDF4EF18181503F4F8EDFDF6FBE2DBFFE501170312100DFA08F6E8C7E2130910080C0B1B0B0214CAEDEAF82E2A141B1F1602061714B2FFE4E1223625131103EF0E0514CBEFE6DBFAF6E3EAEDFCEA12EC03CDF2F3E9C3DACAC6E3E0F7ECCBC0000BF70D04F804F7F9F70BFBF3FBF5FB0708F8F2FB01ECFDF0DFDDF0F709F3E7FF181515FE12050DF50106EEFBE6FDF5131C2723F4EDEAE804FEF9FEED12173C15EEF6E6C5ED09F0F21400F4021D101309EFF1EB030005F1E3EBD60D13FCECDAB7CEFBF4E6D8E4C4DF17FAD3D0CED7DB04F6FADED0D71216EEEEDBB5D0F0FC06DFF3FA02FD0509F3D3D809060C0CEAFB0620171B2002EFD6F6FFFAFDF7FE0609121806EF05F4EE09060B06131402EDDBE0ECEDE6EC02F8090807000304FFF4FDF0F20B03FDFE0BFBFE0604F8F202F5F5FAF2FA0207F3FB070203FAF7F3F5F10B02F5F8F6F4FF00FFFEFB0802F7F30CF1FE0105FDE8FA100003F70403F20BF403F9F6E4DFCAF9FF0D0E0309FFFF07F9DBBABED8F7E705F203FEFDF8F2FBDFD3C5DDF5DCEBF406F70CF50602E4E4E5CADAE1E5FE02F5F408FEEFF3F6F8F0E5F7F70D0BF4F70CF8FC121314FE080A020006F40AFF050D0E0A1309FFF7070DFD0AFEFE03010CFFF9E90BF4F50602F5F4F206F7F0F3EB04FBFD06030602F805F8FF0005F0080606F4FCF2FB0A01F101030BFAFDFA03F70BF4F5F109FEF2FFF6010505000A00F5FAF1FCF307F5FBFC08FE04FD06F909F8F600010319FADCFAEA09FEFAF405F7FFF8F6F7E9F0FBE50CF501FF00FE04EEE8CCE1ECE5DAE4E6F50B040BFAE2CFCDECDFCDDBF1FDF50709F6F6EBCACC1809E9E7F5FBFBFEF3FCFEDDDD052805F9EEF10C06090506F605F805211EF9E5EB05EE02FAFFF7FE09211700F1FAF3F20DFBF502010506F102F0F6E5EDF902F7F107FAFEF301F5F1F8FCF6F6F6F4F5FBF80F08FCFA05F7040A090A06000306F6F2D3E4D3E2D6D5EF08F7F0DAEED9E0C4CDD8E6ECC7DEF1F407E5C599A6CADBECEF02F1B6CEDCD4C1C3D5BEE61C241C362502ECDBE6DFE1C5F004162D15290303EBCFD6FFCFFCF91A2B2A162005F6F3ECCCF6071F05301414F5FDF1F4F3DBB808102014240A12F1E7F6EEDAC2C4ED200E241B1DECF6D8E8EAC1D0C3BAFA0D2027FFEEE8D4CCEABDCEBED30AFB05F4FCE8D5DEEFF50309CFD6F7EDFFFAECF3E5F6EAFF22F1F00509F3FBFAEEFD050A111311EB01262931120B0E1111021E10F3F905FAFBF8F5F3F705FFFDFB0B080000FEF3D3D8E5EFC9C3B1D0E3F8F3FCEDEAFAF3E202E8DDBFC7A1DAF8EFE4EEECF61945261403FCDDC008E4E904070D202F1715181607D4F6DCF0080D1807240D0F0C02ECD605E51109FE14202B280F12EEECF208E010F20A0508322A05E4F7E6D2F9E0F2F10B06191B14FFE1D1E4C7F4E0F1F2031C021F06E8ECDDDEE0F2EDE7ED11F310F7FDEFF7EAFC0507F0EAFB080DEBE2F6EEF4F0F41109FC0A090B05FCFC07FE07FD2913F5F70D0F0C070FF5FEFFFE0F05F2F4FC0704E2C8F2E0E8E5DBCEDAF7EEE6D2E4DCCABFEAF1E4F5E8B5DCDDF1D6B6C91217F9E3F712F2EEDBE3C8C3EA090E1D3E391BF2D7D3E1D3DDDB06120A2A282817FBEA06CBE7C4D613040F19152712F711F3D2C9CB070C0AFDFE0D36070B02DFD3FAD40EF9FB06FC1B0EF3FAE9D1ECCABFF40CF8151E130B10E7E3EFD1D8D6F1F6FB08FEF8F9ECEAF5E1EEEFA80102120AF70A01F5F6EAF7081AB8D8F80D0905F5DAE2DEF70916F1D5F7F7100109F7F0F70809FC21D5FB112A061E151B0A1E18181CF90BF9FAF3EF0802050102F804FDFDF6F5F8EFFBF9E9E5E9D8F6F4DFEFFCE7F5F5F1D6EE1813FDE3C2AAD5EEF8EFDAFF213B3E2D27F5DAE1C4FBD9E01414111D19171705F0E2DFE9EBD4F2F0FC111615FDF6F2E8FAF5E5F106E6DBF5184EE7E7F40003E6E2ECE2ECE5FE4624F5EFF8F7C6DCE8F7E8DEF61B452007E7D9F9C6F1F5E9F40114331F1DF1E1FEF6D4E7E4F0FE221C140DDFDAE1F0E211FEEBF2F70A09F4FAE9F6E7E20F2612F7FB1612FB03FEE101F41518FBF607FD172B2309190D06252000F9F0010D06FFD5EAF2E4DCE3CFECFCF203E1F5CBE2E0E5D3BCE3E8B1D8F1F3E4E2BBB2DD0EEBC0D6D6E0C5E4F3E0B3022614141A09E2D8DDD8D9E0CBFE32302D2C2600E9DCD6DBE2DBBF1A2F1F0D1410F8F5F90AFFE2E3F520040003F12407070D11EEC2CFD106EFDAD7E813FC08230FBAC503CDEBCBAABDDD080A09200AB6F608E3DEF29ED4EF0D06F4F5D0E80DFCDFF2FDE0EEFEF90BF5E6EA1F02F2CAF204060F00F8EFE1F9F117E901EF1B100C1A0CF1EBDDF91A01F708E83A0D19130B24153023FAFAF9FA08030AF90B0BF5FEFEF9F2FFF30703F80D0E05FAF605FC04F4F60C07FCFC000AE701F2F2EA0000F80BF40309F9040B05ECF2E4EE02F1F5070BF7FD1B1118001EF2EB01FDF906010A05FF01F4F001EAFDF9040C0006FBF205E4F0D3F5090B0205FDF40E09EBE3EA11EE0913030CF6FC0907FD04EBF103FF000F0C04FB05F702FE1306F9100C04F1FAF3F905FEFC0B050D01FBF0F5F8FDFD060E00F8FEF305F4F9FE05F9FAFEFDF7FEFEFBF70DF2FAFAF709F8FD0DF70AFC0B091208060C07060704FE07F4FCF203F0F70AF3F209F109FDF502F3F3080BFDFE01000D05F509010504F207F0FDFD0A0009FE0BF8F707FC05E5E6ED0D1314F71EF8F40001FCF8E8DCDEF0F70C1724090C00F3F0EAD9D6F4FFFE0022F50810F7F90103F4FC3B4A01D1DDCD0808FAF511FDF30E2D4806C7A5CCF90D02F1F4000515482402D8C6ECFC0A0202F2FE1E2F2013F1E4D8F2F10900EFFB0B071E20F7D5D30A06120603F0ED09FEF8D2D7F605FFF8070104F7F1F9FEE7E8E4F6F90EFF080D0BF70603060908021404151304F2FFF205F6D7F4DADBD7D7D1E0DDF3F4F5F5EFDCBEBFFCF5EAE4E2AECEE2FCE4D4CEE5E1F3F1FBF6F5E3DFCFE9CDAEC5B3B4DE06160406FDE8EC01CDAFBCE2FEEC0B101C060BF8E3F5D7FF051803FAED0A0F1B241E04F6E83927161EFFCC0005012015ECF6D036221F0AF6B302FAFA04F9B50AD907132D09D9D1E6F7F3FCDDC5FFD0E212F4E9D6EFFBFB01FEF50CFBC4E3020D08F3FDF0FCF3FB0D0404E6D7D4D6F2F806FF0B0F1813F0F2F6F9180F0C0B1E131E0B1B12EDFA0BFC14311F2F1118200D171213F101FADDF4E1E5E1E8CFDDDEE2F1F1F1DEDBCBB9FAEEDFEFD6B5CAE7F9E0C0BEF2D709EDFCFBF8E9DBD2F1CDA6ABB5AAE5FF0FF806FFE9E7FCC8C3C5E5E2FEF90E0F0CF8FCDFFCE0011A1F1808F7F410102217FAF5D642331C17FBB70810132801E9F2E6382B1613D5A3F6F9FE07F0B5F8E31320210BB0D1F4F70E04E9C5F3C3DF0FEFE5CAEAF9F40AFDFEF3EFD3C205F7EDE905FAF30501121901D5D4CAD3E90B1211FD0F1A0E00F1F3F20111F81D201417172111F007FDFF0E3B21241F1434181E020D\"\n", + " resource_542530633011197160: \"0x10000000FA3B013CEB3BFF3B213C403C173C2F3C053C283C0B3C243CE03BF03BF43B043C193CEE3B193C1E3CE33B173C033C153CF33B163CE83BF23BF03B083CFD3BB73B0D3CFF3BF43BED3BCF3B0C3C0F3C193C0A3C033C083CFB3B293CE83BD43B273C343C5A3C593C4E3C883C6C3C5A3C0E3CF93B113C493C0D3C143CF33B4E3C483C373C333C893C733C693CF93BFA3B213C193C063C1B3C643C813C8E3C823C4C3C303C0F3C1B3C183C013C193C173C483C793C463C913C933C873C4D3C523C513C5D3C203CF43B293C193C333C633C513C583C573C673C733C693C4B3C423C223CF03B153C5D3C503C503C263C343C403C513C1D3C8C3C593C493C143CEE3B223C1F3C4E3C643C463C293C723C373C4B3C5F3C5B3C2D3C043CEC3B103C1A3C753C7C3C623C1F3C4A3C613C703C6F3C7D3C3D3CF73B013C093C533C513C6C3C8A3C6B3C773C7A3C833C0A3C293C013CF23BF73B063C233C453C603C573C7F3C773C5B3C343C163C153CEE3BEA3BD93BF03BDE3BE63BE63BE73BF63BDC3BD33BEA3BFF3BDC3BCD3BEB3BE33BF63BEB3BE43BF33BE13BF43BEB3BDC3B073CF83BFD3BEF3B033CFE3BEC3BD63BE93BDF3BFE3B003CDC3B073CFA3BDB3BEB3BF43BE73B063CDC3BF73BE53B023C003CE83BD53BF63BFD3BFF3BF73B033CE83BD83BF63BF73B033CF73B0A3C003C303C133C233C0D3CE03BF33B003C043CE63BEB3B0C3CE43B203C123C7F3C653C593C233CFC3BF73BF83BF13B003CE93BEE3B433C7E3C693C4B3C8D3C843C243C163CF53BEA3BE53BEC3B013C243C603C863C5D3C953CA03C6D3C433C293C063CF93B003CEE3BD53B513C753C9A3C623C7F3C4F3C4C3C143C0D3CEF3B013C033CE83BEF3B4A3C883CAC3C733C443C1F3C213C003CE33BEE3B023CFF3BEC3BFD3B3B3C713CBE3C673C4C3C413C013C123CF83BDE3BE73BF63BE83B003C143C2F3C633C433C593C283C193C013CFA3B033CEB3BFB3BCF3BDC3B0B3C0F3C133C083C383CE93BEE3B033CEC3BF63BD43BE83BE63BEE3BE33B063C0A3C1F3C153CF83BDD3B023CED3BF53BEB3BD43BF53B033C043CF13BDB3B063CF03BF73BFA3BE63B023CE93BC63BD13BEF3B033C013CE13BE23BE23B013C003CED3BB33BF83BF03B063C013CD83BE73BFE3BFA3BD73BD93BE33BCD3BEE3BE33BEB3BE13B003CEE3BF63BDF3BFF3B023CE73BF03BF53B023C173CE53BE93BEE3BE93BE23B033CF63BE73B033C103C0A3C3C3C603C4A3C693C0D3C003CF53BE43BF53BF53B053C333C583C453C2A3C4C3C8F3C5C3C123C023C003CD23BB83B0A3C273C813C853C6E3C2F3C3D3C333C2C3C183C123C033CEB3BF43B003C2B3C6A3CA13C6E3C483C313C3A3C263C153CDF3BE03BDD3B053C133C2F3C923C903C753C213C2C3C2C3CD73BF03B063CBF3BC63BD23BF03B383C6F3C2C3C5B3C443C0E3C263C313C283CFD3BD03BF93B023C243CF93B203C443C493C273CEE3B2E3C153C0D3CE53BD63B043CFF3B093C143C423C273C133CF73B093CFE3BF43BE83BD53B003CDF3B043CFA3B023C0B3CFE3BD03B133CCE3BFA3BEF3BF43B0C3CE83BE33BDF3BFA3BE73B093CF63BF43B063CF73BED3BFC3BE13BFA3BED3BEA3BDA3BEC3B023C073CFD3BC73BE33BED3BE93BEA3BEA3BD53B003C003C003C113C433C4B3C4F3C293C403C303C2F3C303C193C003CE23BEC3B1E3C283C6C3C883C923CAD3C9B3C4E3CF03B2E3C503C313C0C3C103C0B3CEA3B463C343C3F3C3C3C423C393C543C0A3C213C053CD03B1E3C5B3C603C3E3C603C483C5B3C723C873C933C3E3C173C653C413C473C713C2B3C603C5F3C4A3C663C703C643C703C333C0E3C153C3C3C443C2F3C553C263C173C7C3C803C443C4A3C663C1F3C0E3C403C423C653C543CFA3B453C4B3C723C413C483C4F3C233C143C243C273C3E3C393C3A3C433C473C293C4C3C9B3C573C6B3C3F3C2E3C303C3C3C4F3C5F3C503C0F3C193C333C4A3C573C2C3C2C3C533C023C0B3C3B3C5D3CEC3B4E3C553C433C293C733C543C123C253C1D3C2B3CFF3B1E3C523C2A3C273C423C093C283C3B3C4B3C2D3C373C453C343C3E3C213C2E3C173C0D3C223C363C393C3F3C283C143C033C433C2F3C113C543C1A3CF03B5C3C7A3C333C073C2B3C0C3CDD3BE73B043C1C3C0B3C443CDC3B003C3D3C4D3C603C843C1A3C403C373C463C0D3C583C253C313C0E3CDF3BE93BDC3BE63BEC3BD93B093CF33BFA3BDD3BF83BE33BF83BE33B103C153C1A3C333C473C2C3C2B3C303C603CB03C453C383C223CFE3B023CFF3BC73B163C083C1A3C343C4E3C373C433C273C8F3C0E3CCA3B1B3C4D3C2D3C3F3CF83B4F3C763C5C3C4B3C253C103C463C9B3C033C283C193CFE3BC13B013C493C6E3C193C6E3C453C393C563C543C033C273C333C163C0A3C1B3C2F3C983C453C233C0C3C3D3C443C6D3CE83B103C273C023C0A3C1A3C203C743C363C093C023C1C3C203C283C053C1B3C443C353C0C3C263C3E3C5B3C2E3C413C3D3C2F3C173C543C0A3C253C2B3C0E3C103C0D3C4A3C1F3C5A3C413C303C353C203C7D3C0C3C1A3C363C103C083C243C013C293C093C343C123C1E3C323C213C053C143C3C3C023C1D3C023C123C043C0F3C1D3C0F3C053CEF3B303CF93B2A3C233C313C043C083C413C313C073CF83B263C073CFE3B3D3CE73BFB3B383C163CE33B193C2C3C043C003CEB3BFB3B073C3B3C203C003CF53B573C343C393C6B3C2F3C223C1F3C2E3C193C173C2E3C2D3CF03B003C003C283C483C753C5A3C643C4C3C443C453C673C603C3E3C193C0F3C2B3C163C4B3C403C5A3C283C0B3C213C403C173C323C2F3C143C1E3C253C313C283C0A3C3B3C2F3C1B3C0A3C113C0F3CE33B313C533C343C733C223C143C123C2D3C563C613C163C0A3C463C2E3C3F3C543C363C683C023CBF3B103C323C313C633C2C3C223C183CD43B753C623C4B3C4F3C263C1A3C053C103C3D3C583C2A3C393C3C3C123C733C6C3C393C4C3C1A3C193C443C3A3C293C4C3C253C383C553C4D3C263C553C453C5E3C463C533C473C163C6A3C283C2B3C213C223C413C163C9B3C5D3C403C253C583C473C473C3D3C183C243C2E3C1B3C1E3C533C823C303C353C203C153C0A3C253C113CF83B1A3C0F3CFF3B0E3C283C8C3C033C2F3C313C183C023C213C143C103C1B3C1D3C0A3C163C483C5A3C263C263C5A3CDE3B0A3C203C0A3C453C333C553C2C3C453C493C4D3C3B3C583C503C1A3C053C213C273C093CCD3B033C163C123C3F3C093C003C053C553C323C623C5E3C4F3CDF3B273C1B3C433C483C153C483BEF3BF93BF73BF13B033CEA3BF13BDF3B023CF53BEC3BE03BFA3B043CF93B013C0A3C133C1D3C253C393C513C2B3C4A3C3C3C393C143C183C113C153C253C403C553C753C463C1D3C4C3C7C3C803C643C2A3CEE3B153C0D3C493C5B3C793C843C753C643C953C6B3C683C513C4C3C1C3C383C553C463C503C423C813C593C3C3C8E3C6C3C3D3C393C443C1C3C2A3C513C683C883C4A3C3F3C2B3C733C953C623C413C3A3C603C223C213C293C963C4C3C4A3C3C3C3A3C9B3C813C663C5D3C373C3D3C253C1C3C133C3C3C643C573C1C3C8E3C8A3C3E3C4A3C563C373C683C213C083C123C393C2A3C503C193C8C3C523C153C5B3C533C5E3C2E3C4B3C053C133C333C303C1E3C4A3C393C163C253C343C483CD73B313CFF3B003CFA3B173C333C273C093C083C363C1C3C1E3C193C253C263C143C143C1B3C243C083CDD3B1B3C2D3C063CCE3B123CFA3BF03B233C183CFA3B193C293C073C173CEF3B153C243CFD3B073C0C3C1C3C1F3C0E3C093C1E3C233C4A3C323C433C113C2A3C333C4C3C453C303C083C063C003C003C083C0E3C4A3C603C533C5F3C523C173C4F3C6D3C5A3C063C003C1C3CFB3B523C703C483C503C8A3C473C3D3C2D3C373C593CDD3B003C193C393C253C3F3C293C1F3C573C3A3C463C553C2B3C373C203C003C2A3C3D3C193C563C4B3C323C373C1D3C4A3C3F3C4C3C183C2B3C413C373C383C523C6A3C633C5A3C873C643CA43C863C793C4D3C313C3A3C4A3C2A3C583C6A3C4C3CA43C733CB53CD23CCC3C9F3C2D3C263C2F3C303C2B3C953C533C663C7C3C5C3C703C983C5F3C733C7D3C3D3C1E3C763C253C973CB33C963C7B3C593C4D3C463C3A3C123C6C3C223C003C533C663CD73C093DD43CB83C313C4D3C1D3C393C1E3C3C3C693C023C2A3C353C7C3CC83C9C3C833C283C193CEE3BC13B353C1E3C1F3C1F3C3C3C143CB53C383C253C423C043CDA3B393C3B3C483C1C3C153C0C3C453C163C463C553C013C0B3C1E3C3A3C2E3C3D3C303C543CBD3B003C433C453C863C3D3C603C393C673C653C1E3C1C3C3E3C1C3C0B3C003C383C8A3C373C5A3C623C2A3C373C803C6B3C613C333CFF3B003C043CF83BEE3BD13BEC3BF23BFD3BFE3BD63BFB3BFB3BDC3B043CF13BFC3BD53BF13BE53BE53B043C003C2A3C023C083CFF3BF03BFA3BEA3BDD3BF03BDB3B003C033C343C133C433C1E3C293C1A3CCF3B043CF13BEB3BEB3B043C0B3C2A3C163C123C3C3C283C1D3CF03BE53BEE3BC33BFB3BEF3BF73B163C143C1D3C0F3C233C1B3C293C0E3CF13BC53BED3BDB3BEC3BFD3B153C283C2A3C1A3C2C3C143C1A3C423C2D3C273CE63BEC3BFD3B0C3C303C1C3C343C493C533C223C363C0A3C1E3CF43BF43BFB3B003C053C093C103C303C5B3C233C173C233CF53B093C0C3CEB3BF13BF93BE33B043C4F3C293C103C163CF03B0C3C013CE63BEF3BFA3BCD3BE03B183C3F3C5D3C3E3C263C053C073CFB3BE73BDC3BF33B013CD93BDE3B123C0F3C2F3C263C053C073CF93BB53BD63BE93BEB3BFD3B013CFB3BCF3BE83B023C013CF53BC13BD33BDC3BF23BFB3BF33B003C023CD53BFA3BE13B033C013CC63BF23BD03BF03BFF3BE03BEC3BF63BDB3BE83BD93B003C033CF53B043CEF3B0E3CD13BE43BE53B033CD73BEA3BD63BE23BD53BD03BCE3BFA3BEC3BEE3BE93BE53BE73BCE3BDC3BEA3BF53BE73BEC3BDA3BF83BF33B1C3C013CEF3BFF3BF23BD93BCB3BD93BE03BD93B033C1B3C473C603C6B3C543C1B3C043C043CE73BFB3BE83BEE3B103C303C4A3C833C7C3C743C3D3C1C3C2C3C083CF33BF43BD93BFA3BFC3B553C933C9A3C8A3C943C6D3CC83CA63C263CFD3BE33BE43B173C1F3C553C963C913C613C883C993CE03C863CFB3B003C0F3CF83B153CFF3B493C7A3CA63CC23C7A3C893C863C8A3C053C103CF33BFB3B1B3CF43B3D3C693CBF3CF73C683C613CB03C333C103C083CDC3B023C0B3C0A3C303CC93CFE3CDC3C8E3C913C5D3C3A3C073C023CF33BD33B003CF43B403CB43CBF3CA23C743C163C153C2F3C203C0B3CDE3BEE3BE83B083C223C103C653C313C3D3C413C713C4F3C223CE73BEC3B043C083CF23B083C373C613C4F3C1D3C413C443CFB3B0D3C053CE93BF93B063CF73BD33BE63B083C083CF63B0E3C093CE63BF03B063CE93BF83B033CC93BEA3B0B3CF73BD03B0A3CDF3B183CF73B043CF13BF13B9F3B003C093C163C793CA53C5B3C513C323C273C713C603C393C0F3CB23B093C3B3C423C463C523C083CE93BE03B043C313C1C3C453C023C903B4D3C133CE63B0D3C083CFE3B063CF03B023CF43B2F3C203C653CAA3B353C573C513C573C833C423C393C333C2C3CFE3BF93B023C1A3C7D3B1E3C553C653CB73C723C3C3C133C633C573C473C353C253C383CA43B063C033C753C983CB53C5B3C403C083C073C413C693C783C573CA23B0D3C493C723C793C863C7E3C4C3C153CFA3B193C603C763CDC3BA73B373C6E3C5E3C313C4C3C583C643C1D3C283C083C303C1D3C473C473B3A3C413C4C3C6A3C023C313C383C3E3C373C123CEE3B133C1F3C863B1C3C3D3C253C383C103C483C1F3C093CD93BD63B053C1B3C783C903B553C243C3A3C293C273C3D3C0A3CF23B043C013C1A3C1A3C3E3C263B123C1E3C4C3C4A3C223C3B3C2C3C363C433C323C123C2A3C0A3C833B013C053C493C413C4A3C833CA13C713C453C1C3C2A3C193CF93B003C003C293C433C9D3C763C923C5F3C553C323C543C503C2B3C0E3CE13B003C043C353C773C643C6B3C3E3C453C473C6F3C7F3C383C193C073C1D3C3D3C453C4E3C4E3C0F3C143C053C2A3C3C3C2C3C3D3CCE3BD33B4F3C2C3C4A3C133C213C013C123CDD3B113C033C2F3C203C373C013C2F3C4B3C6D3CA83CB03C453C1B3C203C3C3C2D3C323C0C3C2D3CDE3B243C343C703CE23CA53C753C493C933C8D3C5E3C463C0F3C2F3CDD3BED3B123CA53CF33CD23CA43C2E3C4B3C753C443C653C3A3C523CF93B1F3C673CB73CBB3CA23CA03C4F3C2B3C133C1F3C6B3C663C2E3CCC3B423C4F3C7F3C913C6A3C753C903C073C013CF33B363C2B3C393CD13B413C2C3C4C3C5A3C3E3C853C1E3CE33BF53B043CF73B1D3C433C013CF83B373C463C473C593C263C0A3CDB3B163CF63BC23B373C6B3CEB3B563C243C643C3B3C543C493C173C033C043CF83B073C2E3C433CCE3B4A3C103C473C4F3C463CA83C2A3C273C423C213C033C353C173CD13B083C053C603C7F3C913CAC3CB23C6A3C253C4D3C263C273CFE3BDE3B003C033C573CA43C873C673C6B3C2F3C573C583C483C0A3C0B3C\",\n", + " resource_9033393555234838650: \"0x10000000FEFDF70CF901E8CBEEE0F50A0001FF05ECFFF9FCF4E4FCEDF1FFF4FAF8F2030401F6F9F407FCF503F5EC120C0B0502FB04080702F7FD0C050C05F3FD03FA08F6EDDDD8D4EBEEFC02F60A0A0BD9B4B8C8D2F9F6EBFEFE000B19FDCFAEBFCBD3DFEDF9F8E50BF4F6E8B5CAF3E309F0DEF1FDEAFFE6DAD8D41421FC0BEAE4FC10F7F1D8E5F910191D21F5E0E9F90901EFC8DDF20724180012E8090A0DF6E4DBD7EE0A230C060DF70CFA07F7F9E9E3EAD3FA03FFF30502F9FB09F90D070B0F030007090A04F6FE02080EFAF601FE06F80DFF01FC09F6F9FC0A0AFEFC13000204F7090DFFF901110104FBFFFA0503FD03FC02F90509F7FC07010709F7FF080D0301FE03FCFEF8F0DDEFFC000102FF05E8FAFF0A01E1DFE2E70B0501FC07ECE5F7F914F2E0D6D4FC00F70AF4DFD5F3FF220FF5E7DAE8FBFB07FDDED2F5F70402FAEFFCEFFE0B0607EADDE10D0F06FF0502F5090A0EFFEAFFE1EB131514F90AF80304F604F0F8EB050EFA07020D0102F90608F9FCFE0802F901100DF6FDF7F50803FB0BFF09FE04040D0AFA0DFE04F6F7020303F809F8FB02FDFD0406F601FB150D07110AF9FD010206FF010304FC0BFC09F1FEFC0201FF07F8F5EBE8E9DEDFE3F00705FE00F5F5FFFDF0DDCFC1CFEB06020AFDF7F20FF4FDF7FCE1CFE909070E0EFAF9F5F20E0F0CF8F6EAF5FE01FC09F2EDF1242E00130B040B010B010FE7EAF4091C1D1808F90BF6F810F9F9E3FBF819220CFC0AF90903FBFAF0F0ED0A16071305F90E050807FE03FB02FE06130CFF08010DFA00050C0F00F4F6F407F2F6FDFBF8050B07FCF7FD03F6FC0202F8F8F9F5FCE8E6FEE5F70BECDDFDFEF9F1ECD2F5E5D408FB0CED08DCE9F8FADEE8D101E2F1FE0600F8F0F8F1E9C5F5E6F9F7F80F060E0A1B00D7EBFA01E7F6F3F9FB0D17121C03CDF9F90CE4E2F9F20F0D040E1009C0E7FEE8F2E3E6EEFAF2E5F10BFEE8D8E9ED06E7F9F2ECC7E9ED0600F9E0E60401F9F3E1D5DDE6F0F110E6DBDE0904FC17EDE1EEEFF4F2FDF1E6DC09F8F7100EE5EBF3F0F2F6E8FADCFF04151816120FFAECF3E8FBEFDAD1F305FB120801E1D1D6DEE3FDE8F7CFD9CECECBC4C4D5CEDCF70CFCFC0809090809050BFEFF060903FFE6EF01F6041016EC0BD9E8F8E7DEF9FCF8F602FE04FC00E0EDFFECCE06E1EFDEFD09F8080F01D5060CE508F8FAF8F510141F1613F30F10FC1FFF17F9E3F71D090C010BF5EBDC080900EFD5E8FD061B14ECEBE8F20C09FDD6E0E7E1F90CF5F6FBD6FC0C0CF9D4DEBDDDFEF5050A05E706FB0E0CFADBECF2EDF3F60903EFFB0606111DF5FBF30303EAF705EFED080EF91410F801EBFAFCE50BF0C0FA031E1B110A03ECDFE2D9FDF9F2DAC9CBC0BDBFB9D1C6DDF2F9080AF7E3F1D9ECE7CEDFC6E0E2F0FDF7D0EAEAEDEB00DEF6F115E8E3EAE2DDFEF4F70B0C06F6F604E8B5DAC4F7EAF8F400FD1D071AFEF4F7ECEEF8FF05FE0C09061DFB05F0EF02F0FE17061A0B09F1F707FF0ABEFFE2FC0A2108F4EFE0EDF90AF3D6DFC715090B01F8E1FFEC081000B9F2ECFC07F9F8EBEFEBFCF60F05EDE4F50C0AFEF8FAFE060309FFFBDEE0F9F200F809FAFCFE081A08EDE7D8D019FD00090E020AEAF1DCE105DEDCE3FD0014201106F4D8DAE6D9F9EFDDCCDCC4C2D4BFCCC1D4E2F5FDFFFCFF0DFBFBFC0DFDFC0AF909FF07030612F8FEF9F8F8FE050610FFEAF0F0EBE0DEF1FCE5DAE6F0DBF5ED06E1CADFFAEAEAE8E4ECF6F40003ECFAF6F7EAE8F3E0E4E403E51A08EAEAEFFAE805F1D5C5F5EDD803F3C8EBF5F9F9E5D2DCFBFAF9F001E3FBF4FEF4E0CED2EAEE0C0BF8EFDEF1EFDBECD2CAF90AF7F6FE06E1F8D8D6F8F6E10713FFF811FCFBFDF2EBDEE40A1500FDED05FFFBF6E3F8FE040A0E0B0FFE0CFCF9E50EEAE50BF50AEEF1F5F0DBD6E9E60FF4F9EAE9C8CAC1D1CBD8F0E7F2F4020309F2FFD5F6CDE6D9D8DBD6E0FA01EFE8D9F3EEE5EBCFE0D9E9F4FAFED5FC02E9FF0E01ECFF0BE5CE0AE4DBF8F40410F3FFF8F61212F4D7CFFE101615070B0302030F11E5E6FEDF26210B1012EAE5FD0511E5F9FE00221C262600EAF8021C25E4F3FC1B231E2918E2F7090E1126E9FDF5171B1D251A011416120F1CD402F913100D1F0210170F041BE9E41BE0E6EDEA0020000710031FEEF1DFF3E2EAD3F7F609000F0201DB00F5DAFF02D6E2E6D7E9CFC2CAE0E9F4F7DCC2CFB6C3CCB7C7CFCD09F901FCF908F50DFDFEF902F803FD05050609F7FBF5FCF5F5F2F3FB0703FBF70D02F7FCF806EDEB01FEF60901FC03F2E4E6F5E4F0F6FD031504F6FC01F3EB05F5F2F30A01100B0D04FDFBF60F0D07230304051928FFFFF9FD050B0F2524EB0DFC1019FA0DFCFFFA16113F16EF0F0610190D0B00FAF6081E27EE01030EFC0CFFFE00E8F9200C0AFDFE09010A0108F60BF5EF1C07FCF5F7F8FF09F6FEFD05F9010011F80901FFF7EEEFF90C060F02080500FB00FBE3F70807F7FA020101FAE4FAEFF60203F7F5FC0B07FC08F6FBF8F8FB04F8FBF800FA0E0EF404110A19180403FA040104F90B03FFE309020D0214FEFE02FB03E2DED9E903050407F2030102FCF0F3EDF8F2F0110A01F004081109FDE2F0E900F7EF0E00F8EF0EFBE6F9D2CFC7DE0C070F1AF8EF0800EAFBC9C4CBBDE60D0503E4F6FE0AF604ECC3C0D2D0F208FCFAFC00FAFD00F201DFDF200B020201FE04F8F9FEEB0A2207F9EEF4F2EE0201F7FC0A0DFF1100F8D8DEF1F803F607EAFEFE0E0B12F603ECFFF0040000FEFCFBE8DEEDE5EAF7FBF50208F806F100E5C4E7C0DDD3C4E2EAE500F9E1D0FEF6F7FAF0F3EBF4EFEC04E8D5E2E7FA030E050BFE07F3CD12DDD8FAFEF3F40718160A0E0BE30A05E8EEFD080B091E1B292520E9F906ED00F00A04060B142C262BEEF90AFB0D0E1712F8F6F51D1824FF03DE050B00192107F6EE080E13FC0ED9180D120D13FBE0F9F80802EEFDFA0B1425142EFDF2FDF7E8F4EEFDE00E0C181918ECEAE4E9F5F0E10BF5E4131B160BDAECD7CBD6E3DF0FFBFEF3F8D4D5A8BCCAB7C4CFE60BFBF1E1E4D9D2E1C5CAE2C8C301060102ECF4B9E9D6D0E6C1DBE5EC0BECE8D3EBE4FDFDEBE6D7E6DAEC04E0D3D5E6F5F213FC02FC01F1D00FEBD5E6F2EEF2120E1A111A0DD8FA0BE3FBE20B0BFD1A22170D22F40CDEF2F5030C0A02FF251C2A21F107FBF30D1B16271808FC0F1118FD09E703181D172D1BF30A0F10220106D916141D272CFE0004030019EBF7081B11221D28FAE1F5FA030BDE07F6150720261DE9E4D5ECF6F2CE0CEAFB1511161AEAD2C6D1DADDEC07FAE4E5D9D7BFABB5E3B1CACDCFFFFEFAE0EBC5CAC0CCD1CCCED4040F0BFA03F6F4091B0D1612090D020A0E13EE05FA071007150EF5F807F80F18FFE8FCEC01FD061909FDFF0704F7F8EAF3E5D7DE0801F5DFFFFF05EF08F8EEE5FBDCDEEBF8E50001FCF0FE03E6FA07D0BFEDFE02FF0C0DFEF9FFDD0401C0D7CBFBF90A0408FB05F8FD03E2C1C5D8F40C020205FDF4F1F3D9D9BEFB0D101E14FBFFEC151D08FCDDE719151901FA07151B21211503D5CF0E0EFEFB0E10FA04EB0CE1CAA9C7E7F007FC070602F4FCF6E8E8F4FEFD0EFB00F80F080914130F0E09031611021204060DFEFD100810FE0710000CFF1314FE021011171301051301090A0210090E0B0E06FB05FE040D080C08FF0312080D0F01200710140B0A140C08FD1009160209170E0B05FF090E0F1504150B18170713050F081409030C02201B0507140F0E030F06150800040E1CF6F10F1B0A0F000A10081205161B03160A1E1413051008FE041A14391E19200E16020708100E130904120C2E041205020B000C040C04120E15210F0A120712FE081407010F1D1A19040811110A120E060F150AFE100C05FF04140106FE04150C09081315140F03130B130F0A1616120906000C020A0F06140515001319180203F90DFE0905150D120F0910110B190611FA02040916030C010C17FFF9FE021614050B040208181217FFF2E0F707110E0E070B0B02121C0CDFF60E170E0101FF0E170E1E1BF6020F07020412130709001C1C1A0A181507190B04FE140D1E12111109FAF701140F0416141417110C27F4E4EA0B0C000C14091519100A160808FE1A060C1A041110120617071712071618010C120606070A0F07FF070C100A090614F50800E4E0E51AFFDCE5EFFAF501FED6E5DDD0ECE7C6D7F6EED8D3091205FFE316EFD7F0D7CBE6EEEDE5DE0904F6EC01EBD2CEC5F6EDDBD2E9C8FA00FBE6E3DFD8E1F8FADCC9FECDD8F0FEF8E0DAF7F9EBF4EBEECFDAEDDFECDFEBE4EEFEFAEDE4E5E2E1EEFEEED1CAEEE7E5DBE6F9EA01D0E8FFF6E4DDFBEDDFF2FDFFD5EFC8D7E5F5CBCEFBE6F900FBFCF3E227EBFBF4F0F9FE041715080500D80D1FFFFFF6F1F3F91702F5FC15F7BDF0F50F03F90B0304FEEDCDF9FBE5D2CBEFE3D50EE2BAC5DCE6E609150A0A00001D1103170A0F160F10FBFB000E182611102D07F7EF0F12F90BE503F906FC0300F7EFE800ED090C01FEE0E4D6D3C7E1E4E80CF2EEE7F4FFFFF8F6DAC0E3E1D207F7F6E4FDF4F10FFAEFE4E6EBE005E8F5DDEBDDEC03F3E4EC03E4EC0E07F8E7F5E6F4FEEBCFE8F2DFF106FCCCDEFAEAD503F7E1D7CFFAE012EEEDF6E8DDEEFDF3DEE6F30DF50EEF17F3FF02F90AEDF3080E010C0DEA1A140E0AF9FEF9071806FFFFFC02D70902F40EFF070A0A0DEEDE0101E6D8E3DDF203EFD1C7D2F3F80DF7F4FFD9DFD21A27140506E2EBE401FEE5FDFBFF1008130616EEEBD41508F9E7DDD8F8F40107090AEFD6D80D00F9E7F6DFEDF60105F2CFC4D8DFF0F7E9E8F4F9FDF70806C7C5F5DCF0EAF3F7E2FAF7FFF9F0D8CFC9F405EDF0F105F9F2E7F7F1EAEAC50DE606EAF4F4F8CEDDF4CBE2DD05DDECDDEBDCEDEADBD8F5F5F2F5EEBCDEEED9DA09F5EDFAED0C0AC2C7130B0B0DEDDDE4E6E8EE0B0D22D90A120900EFF4EBFA0808020311FEDDEA0308EEEE00040C0AFDCDF60AEDBBD4E4D7E0F4E5BDBEDFE80604110B0505080EFA0D0DFE10030E06F4EBE9F2FBE6DDF2FF01E7FA001804E6E6E8CACCF2DFF30EF4F8FB100E0AF0EFDDDAB2B6EBF9F6DEEBFBCD01F600E7D9D8C4E3F400E9DFF0DEEF0609FCE7CCDEEE00FBEA05F5F4EAE5F5FEE3D6EB06FF01DDECF7190D110901B9D3FCDCE8E6050A0500110BFCEBC3F5E4CBFEF9F7E708F30803E6D5E9DCD5F2FD03FB10FA04FB1018F2FCE90D080D120D15EC1F271D0BE5E7FAFB0D02FFFF1601E702F4FAFB01FBF0FC12F8F7FBF8EAE8FDEFFCF3E3E1D2E2EBF3FAF4FF01F3EAC9DD1422F9FCF0EEEB001CE9E7132008240A1808F7EEEAF5160DE8D10908160D17110BFFD30AF8F8FCC1E6ECE700070907E2D8E7EAF1F0E8F1F1F2EF11F905DAC8F5CFF3E4F1F7DBF8F5F6FA06DCE4FAE105F509FBFAF40100EEEAD4CBDB0705E70C100A0304E3F0D5C8D00AD6E6E009EBD906ECE6F6DDF5F313C3E5EAF5E8E5F1EAFB02021011E9DC152BF1EAE0DEE4FEF908FE0CE8F3191510F4E9E8E0FDFEDFD600FFCE0BF013ECEAECCAFAE9EFD81700E0C4CDEFD10AE3A6C0DAEFFF03100902040C080312010B0AFE07091404080200110E0304150A09130B1304FD060D230B1916010B0303060F09140902FAF0FC10FDFF0000FB11090F0E0EF3EBE00508FB07FD030903091116F0F6F3FF0E11FAFC00091005000F0CF50E180E09090307070E061710FDE3111104FA0201090B02FF080CFC040810E4F4020B02FF00150EF4090FF6EBF0FE010D05FE010916061502F1FD0808130904100B0907030F0BF6FEFC0815000F160704FE050F08060E0E170E01010615090CFC0AF8FD11FFFE0B0AFF10140E0F0F0C19080B18050C010A1315010A0209090705FC1312050714130412FCEFF1F1DF07090A0905070E15FCFEE9E0E1E5E9E3FE070B020802FD0DEED2E8CCD9E5F80516091015141EF5EDE7DBE80A0A0B150E06F9FCFCFCCCE6CC080CFF0C08FF17170E0AE1D0F0F61408170BFF1600FB1CF3DAF8F6DA0D1702000C160D0E16E3D0F901FD11170912FE1107F901F5DBFF072A1A1B160C0E131C1708FFE5FD191612061A0E07140108FFFE100808031A0C090902150FFBFFEFF30BFFF9FE0F030C13010AF5E6D1DB1C1715FF09ECDBF209090CF507FBF0090CF814E8E5E3111BFE0BFC07FEFEFE071505F4CB0BDD010C0E03FAF3FFF90210EAD806E1F705FBF4EDFB02070203F1CF07E70EF8D2A8DFFE0C0100EFE0E70BD60CEBDFB8D8120D02EAE0E5D8180E12E2ECDADA0E0CEDE1E0E8C211F8E0C7CDEDEF11F6E6E5ECEDF50CF1D7D6ED0B0400080901F1FB050FF20BF7F60C0203040F0BF208210C03F002EC0B0D0F170B0DFED0100A00FBF90B05EFFEF4030503B6ED13F8F7ECE0FEE1F7DDCDD2D7EAF409F5FEE4E3D919110A09F8ECDAFA1311F2FA0CFDF0FB0A0310F7E8E7120F0311091C0D1217000C1301CF11F20C01160EF605F2FA140603C9FEE701FCFEEBE81AF9FE03FCF3C5FCEE09F6C0B7E80D111003F6F5DB06C310F7DCD3E60C10FCF3F1E9D507090DDFE1E9ED1710FEDDCEC8C11311DBBCC8E401110DF5EAE0EAEB13EDCCBCDBFFF808F4FEEFEE01140D09F8D1E5F9F1FBF4F90504042AFC11D71501140A0808FC170BE71AFCFFE11B18180006EDFE0501C30513F8E6CDCDF4DDE5EFB8CDD7EB050AF303F70F18FDF211F7FB03030207FDF60A1A0E05FDFDE8F5E4FEFCF50403010CFFF7FCF0F3E7EDEE03080702FA010700EBCFC1C6E3F904F7F10C070800E0D9DDE6ECEFEFF1F1ED170EF8ECEAE0E2E9EFF1FF19F309103340392B120909F6042F23051C1A31283228181C20192C2926F60D11051B0E1F0A121128261B16FDFEF9F3F506141728222E2D18FBF705E7E0D9DFE40D0D1C3F4B2DF801F4D9E4DADAF3FE082E1E231700F2F0EDF6DCFAE9FF0708010A0A080408010108F606090AFD050401F60A02F60BF8FC05F9FFF8FEF60704050503F500F1F704F3FE03FC0802F8FE0A0200F9FEF5F5F7F8FD010B02F7FD0305FF0306E8EFF6F2F6F7FA0AFF110516141CF3DCFDF1F8FCF909FC0B1932232B0EEAEEFF0802030C081835302D3806E6F5F1F90604F3050C1C17FF190CFD0C07FA07F9FBF8ECEEDEE3E5F7FF04090AFB00F3EDE9DFD4E3EF010D14FAFC030508F5EEE4E6F2F80A201213FDF6FD0101FDF30706FA0A100A0002070508FF090E02040BF4F7FE09FEF9FF09F7040207F9FB0B070AFCF301F5F302FA040302F3090204FA00F6FC020AF4F303F3010802FEFFFC00FCF80A02F907F3E9F8E8FCF7F201F5FE030602020CFCE7E8E3FAF0FB03080D0A1519191003EEE6F7F3FEFF00060F182830201AFBFFFE00F402080A261F24211D1807110009FFFCFA00021610F70F1E150A0D090F0A02FBF0F5E80221FC171617150700F8F9FCF0FFFA06F609FB10040006FF0300E907EDF8F7040D1100FE04080AFFF706FAF80202FDFEF8F8FBF802F50800EFEEF30FF60BF8F8FBF60509FF020100F5FAFBFAF904FFF4F5F1E1DAE9150BF0EC08FE06F0F5070C2B2934462502EDF91407EFF6ED120B161820192203E3F2FEE816EB080A0D0B151C1C14EBC8FEDA0BFFFA1A020A170DFCEEF6EFF8B8070F0DF60C00F3FAF8E4F4E2E9E5DFFDE7FCF1FDD8E1E4ECE0FC14EA16D1D7E7E705F8EDE0E2F9132E0725FFE3EDEAF30101EC080D1737EA0D0701ECEBFDF917161813191415EEF0F3FCFCFF0A272B291C09180A0C0803050A03FD0A322C030DFFF5CAC5DBFEF6FF0B0C110BFF030308E3DABDA8CAD5D0CBDFE3C6E014FC0A08F50104FC00F1FFF9060AFFF9F2060E1213F9FCE9ADB7020EF2F4F80809190410280A19FED5DDFBF617ECE900050B1914171CDBC802E4050A0113F80F081516FDCFECFEE0ECF1EEF6FAF5050901FAE9F004E0D6FEF7F009EDE7E5FBF2EA17FC02FCF8F70CFDE8EDDDE5DCF02A17010913150907E7ECFFDD041E3C13071E170317100AF202FE1F191B0E08F8000F030D000A161511121FFC1217F8F5F70107F50F2214060707FDEEF2010212FC0409020A020CEF0ADFE9D5CFD901FD0AEFF0E4D70A0AF3EC09FB0B06F2E9FBDBEB1B0BFFC9F4F8090410F7F2D8EFE5D0D1EDFEF6F71018FBFE04E1EBFDD6D8E412FD05F41802F9F5ED06F6EC01EA07030102EE07F0F6EE0202D0DDDD0A11E2E1F1EE05EFEF0104F40FDDFCEBF3F5F2EAFA0B00F7F31220EEFBFFFBF6110F0EFD03F4141C46050E031717111A16FBFBFA012F3DD117111E0209180715F91517193EF607F2091507FF06FD19010F270F150502F902F2FDF508291C021033DDC6E6ED0306F5FAFE0209170AEF0BDCC6D9C8C8E5FCF4EBEBDED106FCFC04F8F4FDF3FCFEF2070B0504F8ECF60803182427E6DFE3DDF50F06EE1213342C21FFFBECD5CDF706EA0409231D0C110D11F7E1D3EE13F10F0F1C1007150DF6E4EBF906CDE303132E20191106FCE30511F412D40833232311FCE8F8EA0C163117F6060A272C03F8F9F8F921193D15F4FCFF130C03061311111C2D283207040403FD0F1408201D16021F08EEF5F9ED030D070D0913210A15120B0DFDFF110A060400190B110FEEFEF8EEF1F60A1003040006080A0AF9E3EDEEE0E2FAF8E7E1EBD8FCF407F6F7F90702F3E2F201DBDA190B08F2F1EDF70C13D0ECEBE4EDF6FCFAE2FAFEF9EDFDE4EFF7E6FCF9F7F6FE152108F4FCF1E6EBFC07EDE6E1F51B01E6E9ECCFE9EE100F02ECC20D00E1C5C9D1D0E1FC0B120313EAE1F4BEC7C7E8F6F30D0D0E1827EF02122203181213181918FE0C0B0424203A3C302C251201FBDFE82EF91F241E31291512F5F6E5E805F6F72216241E1015FEF6D7D2DE07F5131B04FFFBFEF9FBDCE6D7E015F6F8ECE7E1D0DADABDDDE8DED9FE0501D9B0E8AEE4D7F5B8D9D3CC010008FE0902FE01FD0904FFF502FF0604F9F4F7F0F2F6F5F0FEE4FF06000209FE12F4E900E0E6F4F0FE0AFCF909000404FEFEFAFBFCF3F7FD04F7FB0319070301FD020808FF02F7F508FB0C00F9FFFC1312050B0D000A041A19F6F3F108FEFD1014F4FF0108040B01EFF8F90BF903F3F5F80AF4F50BF30E0D0BF6FCFA01F50D060008F60B0B1A0DEE00F0030506FA0501FB090609F8EFF7FCFC0A04F9F30506140A03FEEE0F0FF804F902FB020CF6F404E605FC0003F3F6060208F0F3E805FFFBFCFD04070A0401F4F8F8F806FE07FBF607FAFCF3F5F4F4FDFAFA1D04FC02F9030605FFF6141A1D17131A0A08F2F7FFFCFB020B1213061C171BFDF208F401160E15191F21130C08EAE6FA0A07FD161A2725312D23F4E5F6F4F7FBFF1931331C1009D6DADAF6FBFBF3FBF102F7F3DBBCC7C0EC11FDF5FBF2F5E3BBC0D2D6CEE1231B1104000609DBBEE6EFE9FF172D0F13050404EAE0EE00FA151F362911FCFC120D01F406F3F7062C1D0500FFF604F0FD10030AFCFF0E0502F6F5F5FB0005F8E2EF0F110700FD08F4FB0306EA01172606F105F7DEEE0E08F7F7D60E080E1205080EEBE8DCFF06D7F4FB02F20D090D0D000BFD110BF1EDEEE6F1F1040904FF12FDF0F90F0FF1C7EF000106191208F2ED09EDFBDBD0DCEDE8FC010BF7030501E1DBD2D4D8E903F2F4FBEDE01303E4E1CBCFDBF8FFF1E4EDCFDF1E02DFFAE6E4ED0B01EDF0EEF6EB01F6FBF7F500FFFE0605F3FA0CFB09F9D6EAF80102F7EE0C13100EEDFDF9F90C07F8F5D3F808231402080907FF06C0D2C4C7C3D704FBE9E8F5030CDCB7BCBCDEACCDDBCAD7D1E9FD02F0F2110F03E506F0D0DD1E19F4ECD512020E13080113F4E3F8FFFACE05F9F7FFFFFF0206FB18EC0CF7F5F0F0D7E7F00201030715F5F3FF0F13D8C3D5FCEB0B100D10F7E30BEFF1CEB5D1ECF0FF111114060AFDD6CBA7BDC1E5F7FA03FDE1D82609D9D6C1A8B9030DFFEAF2D6DF1009ECEBE6DEF3FE0107F0E6E8DC0E07FCFC04F808F8F6F9EBEEFEF6FFFFD8FB110405FDEFF4FD15FE01F800E3120105ECD3F404230CF908F1F8F801ADC1AFC8B0D3F1F2F7FC04FDF8EDBD9CB1D2ADC9E1DEDCD5FFF1F3FF08F2F20400FAEE02F70101F6FC0A02FB02FB0812060A0BFCFDFCF8FBFA070F070AF8E7E4F5FA06F4FA1717121904FAE2E6D7D4F103070A151211081B1F1CFBCEDCDDF2060E030A213339351B1302D7F4FAF10104080E053A1E1612FF00F0F9011003F202F912F5F7EEFA0701F5050A1E0AF7FDF7E50EF3E3D4D003FC0E0C131820181D08EDDCD9E4FA080E191C161506051AF8E9C9ECF8F70D291F29412F2C2A17FAEB0205F5F4052A39443A302214FDF9FAF3F9F400F9F9F6F7FBF5F003FFF3FCF4F2F30603FA0006F4F1EFEFF8EFF7FA08FAF903F406F10008F3FBF0F0F9F401F402FC04FC03F6F8F6F6F7F2F3FFFCFAFCEFEEE4EAFEFDFCF308FEF1FC1302DBE1E8FAFBF5F9F400FCFF1304FCF4E3E9F105FEFC03F508140E0DEDE7E9F600F8FEEFF90508151D17F7FEF8020F050608EFF10A1D272D2604F6F5F3F5ECF9FD02FA111C1D1B14F7ECF2F9F3F9F60406F30006110CE2F4F4F0F303F603FFF10F09EEF1F3FFFDF307010408F9F3EAFAFAE901FBF8FEFE01FEFCF1F805F4F0FFF2EEF4F4FE0401EEFEF5F5FDF6FDF7F304F5F8F3F00605F205F9FBFAFFF2FB06EEF2F1F1F8F4F901F9EDE6E2E9F9F3F605FDF4FA0D05E9DFD5EBDDF7FEF5FCFD02080C0919151205E9F4F1F0FBFD121D2E2B2AFB18051C07EDEF05F10B182319F2FD19111518F6F5EEF9F50316F2E6EF011304E3F50203EEF30AF6F5F507F5E1E5DBF408F3EEE0F4FBF102EF0BF0EBEDEFFCF2EBEBE9EBFFF40E0FFD04FB05EF05F8F6F0FFF0F619010AFDEEEFF8F102EEFCF9EF070AF007FFF5F505F507FBFAF2FA01FF04F5F5FAFDFA0304F8EEE1D3DECFD3DEF2FB0C0403F00717092B35290EFAD0C5DC09F3040420161015241418FEEBB7EFFB101C28122322FD0AF6F7F0E9DED5071809070F0BF1F2FBF0EEEAB8BB0DFAFDF0ECEF0102F50AFAD7B4C4E5FFD5DCE1F0121D201EFDC6D815F0CCDBF4F40E252A1518EAABD7121909F502070E1C0F0604E1F4B6FD1930120E1826181005F502E4C4F60D2B211909020C02FEE900F0BAF50709060F09FE08FFF2F8E9DDCD0A262F240D17FEFE060EF2FAE8E608E1D001F90B14EC0A0A01FDDF02FE0206FBF7F7FDFDFF03F8FBFEFCFA1E160B00DCEF0DD7C2D4D1EBF1F9020B110812171D07F800DBC9FCFC190F1C091511101311F9E1D7F8EF14150805FB0801FFFBF2D5E3F2F303F4EBFB0612F4FE00E9F1DDF3E9FAE3E0F00609FF09120003DFF900FDD2E1F20B0D0A151008FBBAF40502E8D8E8F1F80F160E06EEFDF2FF0B1206EEFC11050B0EFBDEF7F3EE1F10140AFAFEFC03FCE9F0E2F6FA0F18120A060CF90105F8EDD1FC0718040E140FFC09F10601FCFC02F9F81420331D140B14191AEEEAFBFDF8F7D9E2EFEFD9F6E6BFB9E6FCE6EF0315F0FAEF0E10F2ECEBCCDE02191910FD18030E00E2EFE4F7D7F81D151110081204020AF601D7B2FA211805F8F90A22211D1AF5C0ACC504FFF5F90722221C251AFED3B7CC02E6E3D7FD1D13201A00F8D8D4FAF6C8D2D3FB081112090803EAB80D13D6CBDADE08F11C0A0401D8D10B13FDF6F306FE14FD15030EE1C2FC121E0BFE00070F051300FCDFACF9FE0E0C0813FC10090AEBE6F2D127182D130E1C1B0102FEEEEEF5E604E3EF130A220504F60E12E7CDE601FDEFFFEFFEFCFFFCF9F6FAF3F2FD00F6F20700FB0FF6E602E9E3EE0203110A0A190F07DBE1D5D9E6DA0B03201022240907F1FAE1EAFEDFF71B1C25272A221E170E09E9E8CCF21015332F2F242134281A00E3F4DF1122220B0C24202A3310E8D3F1EB0BE7D6EEE90A211E0EDEDCCA0301E9E7F0EEF8141206F5D5D3F5D4FAFCF9FDF01D18FB01FBE1F7DCCF060017141C07081E040605EFE6CC05FC0501061A1216FD09EFFFF8F9FF12120E1F1417191B061012F5EA11F4112206160500110FFD00ECF402FBF5E0DBDEF9E7BBDBCABFF0EE03F7FE1110ECFAF2FAF4FED6B2F8FF0E2204F3FFE0DAF4EBF3ECFBDDF40FF8FBF5DCE7FBF2F301EF02C7021B1606F1ECEA08181A0D13E9CAEF0F15EEF1020A2B1D181C0EBEFCED15FCF20405071B080A00F2E8B0E4FFE6B4BABAD7F1ECDAE4F505AD0CEAE4B597A8B7D9D6FEFE1D11D6FBFEE2F1BDB6B9D0FC12FA19FFAEF908F2DDD9D5E60A04151400F9C9FFFB02F8D8F409150F14090AEADBF72AF40FF70C1C2E2D0B1AF7F2F20BE8FB13E9FCFBE0FC22DBC9F902EFF2FDFEF7F5F102F6F0F1F0F8F0F8FCF4FAF4F1F2F1F2EF03F4FCFF0802FD00FD03F5D4F3E5FBFCFEF50007F00702F7F4F3FCFAF9EDFEFDF40407FC01FBFA0E0EF9F6FCFEF806071211200AF5F8F50D06E608FCF4F30C1C0502FBF4F8FAF6F5F6F6F80AFE09F2E9EC0BF3F1FBFC05F201ECF0F4DAE5F303ECF6F80602EEFDF4E7D9D4E3DD0102040504FCF400F4E5F6E1DEEC1308FA000AFDEFFA0AFB07F6F706FC070A09F4F8FDF506FC020508F7F9FCF1090702F5F0010400FF05FA0CFAFFF2F6F0030506FD03F6F8F2EEF801F0FB03FDFB0002FDFFFE00FCF4FBF6F0F004010407FCF92824360BF5F70302F5030BFE0A183E3B1AE2E1F3F300FA0108FB1713212703DFC6C1FAF3FEF80E0C22291DFEE2C5C7E8FBFD04000B0719100E1EFDF701EEF400F0F9FDF1101C2337210F1106FBFA05F3FBE6102A48584629F9D9F5EE07F7F2EBFD2550562A14E6D6D500F6FCFF01061327320DDEC1DFE7FDFBF8FAFB091005FDE6EBDEE9F9F4F3F0FBF70C05F4EDE3F0EDFB0DFAFEFF010D0C110506EFFE1704EFF1F7F303FEE0E5F4EAE8E4EFCCBFEEEEFBF5171103080109090007FAB1DFFF12F50412020FFE0AFC010F03D205D90006F6EE020709100F07FED2ECF2FCE4B3BFCCE3F900FF0CF0BDF7E7F3B6BD9FBFEAF8EBF4DBEDF5F4E703DED5BAC4F000FCE8D5DBFEFB192C01FCF7E2F5FC1404FAFCBD001D18171EF8020D0F100F1005CBF9091C0D00F2EDFE060E0B0C0BCB042E160FF4F3E0F9F600F7FBFBC4FF050D0209EAE3DBE4F7EEDFFCBBF80DF61A09F9C9D4D3F9F0EBF3F1F60BE8C1CCB6DAE2CDF903DDC0FBFE0708D4D6FCEDE1E7E7C8BEE2F9F0EA250F0A0200001316FDEBA5DE030BF918120613080E011401F6D9F7F4F00600E4FE050EF90209F0CD00E7E7DAA8A2CAF0FF03F6FBF8BAF3F8FEADADA1ADDCEFF5E3EFFDE3F3EEECC1C0C6B1EAE7F1E5D1D5F2FF2E0DFAF6D6BEEBFB040EFDFACBFB211A09FBEDD6F8060D060603C2F6F421FFF6F5EDF70505130311CB01330BFA00ECC8ECF102F50709B4EF1B0001EED1C1D1EDEBF2FA01CAFB08FC07F7D5CCDDE3F105EFF8EEFCFCE0A1B2C0EAD9D5FD0AE2C904F8F608F1E5D4F6EEF0ECF1F20009FEF4F9F5E2E0F4FCF712170F050D07EEF8FAF3ECEBED09F9111C0BF0FD050BF301E9E5D4F50920221A1FFA00F6EEF5F1F1D2F10B1D0B04F1FAFF050E191001E4FDFB0AFD01F009F10CFC08FC140E0F17131507F80A13030A030109FF1EFB170F02FDF800EF01F5EE171704F90907F0EE0A160C09F4E9EEFFFCEA0A0C02F200F6030707EFE7E8C9B9ED07F403FCF6F5F7EFF3E3F0DFE3F91404FE080211F0F1FAE802F7F702FF00F407FB0BFAF6FA060F06FC0E0BFF00050201FF0709F8040501F3F307F7F40A040603FF0E140F08FF050C07F9FBFC0301090F020FF703FEF8FAF8040805031101FB0B000501020AF7070BF7FCF2F8F2EDE302FC06F3FB04F7FCE7E10815DEDF0E07F4F6FFFCFBF2E7DC0415DFDDF6020206FDFEFBDFE7F90B0CD1E9F502F601FDF306F0E7FB07F2F6F0FA00FEF6FAF2FFFEF903F5FA0702F405010DF8F501FA0E0AFA08F1FA07F700F4F30A02090A0A020B04FD0BFB0CF9060702FCF3FB18120204F9F7FEF604020BF800FFFE0EF9FFFC00FBF4FA01FF0900F9F5F70000FB020805F5FCF6070908FFFEFB0C060A07070201FDFE0C080D0105F3F80CF804FAFD090307030B17FCFC06FEFEFA07FB040CFE030A11F7E50802F90C02FE02FEFD090E180AF6FCFCFC06F6F7FFEDF5EB14F9E9EF07FB06FCFE03FDE5FBEC0AFBF20203F9F600FE04FEF0F903EF0AF70F1105F907F50101F4150BFFF9F803060105FBFCFB01031708FF0EF3FC03FC08F5FE01FD0A14070DF801021207FBFD0406F8FF0B1202140DFE080A06050B09FF0DF40A0414FA11F3F7F4F607FCEDD0D6BAD9BAD8D9D7EDFCFBEADADFC0BCDFC9C5C9EEC4DAE4F4F102FBF309FF04EDE8DEDE050FF8EB0505F8F6EECAC2B7BCD6FAFEF0EDDC0CEAE7D3C4C5C4C5E2E9090BF9E6F4E2FAD8D5E4D1CAE6F2EFD6CCF2FFFD0BFE02E0E3F606F6F1E4D6F31B140912190CED00090CE4EF1AE7140C080408FD0B0F0605F5EFFEF8FEFCF3F7F2F309030BFDE4D7CEF5E103E5DBDAF1FB0400EAE1DCFECED4DED0CFD0EAEDF40909F3E10CD3E4F2FFEFF0F3F613FB01D4ED02DD00EBC5F5D7E3D8F6CCEDF0EFF405030A050802FB0BFAF7FEF60CF3FDDDD7E2F4F60CFA1F020BDD06F2F7FAF4F40A0216181A1B1DFCFF0AF4EEF1F5FDDDE3D3FBF11B13040AF700EFF0E1B9DFDBE2E4030D0E07DDF1F600EFC7DAF5E5DEF8E605FBFDF5F7F5E6DE0002F0F2F2E5F30C000B15FB001907F711240300FD0B180E0C0A190C141C0A14FFF8F20EEA03060404040D1113110908F209E4FAFFF1F6F5FB13050BF9D3FFEFF5E8F9F6DAEAFBFA0701FBF4F4FEECDAEAF8E3DFE6E9000BFDF807FA0607F0F0EBF2E601E1DDFD01060BF7E2D2B1CAC4E3BFC7AFCCD9DFE7CB14CFEFD4E80B020912222B0AEAE9F8FFEDDEE9F7F605180A1307D7F7F9E1E4E6E1EAF60A2F1DFA13EDEF01F7E6FBF0DCF1F5F603F5F7FBF1E3F90405F4E2FBF7F3EDE1D9E4D303171513FEE9F3F6F5F6ECD5DD110A2215F9EB00070D0EF7F2F3100D15230AF90404FD0C06E4F9D60BE8000209EFE9EEF3F0EEF707C8F8E1F1FEF6ECEBFCDEF7ECF1CFE3F1C9D9ECEBE3F5E7FCF8081405E3F9D606FAFFE3F4F7091E1502FBF007F9F0EACFF4E3FDEEFBD4E1F60004030D060D09FF02F8FDFEF606F7FAFEE0FCF6ECE8ED140EF6E2DDDF00EAFD0AEAFBE6DEECE4041628FDF4FFF2FADCCBC3D4BDE50525EF0EF900FEECD8D4D0E0C0D306180818E7F8E2C3E4EFF8D2B1E1FD04F4E205F1C6D7FD1514CEBFFE1F1CF3F1FAFCFA11081A1000021F18FEDF070E1313070B0907070C1A1402F6F8FD09111807FE06FD0C060B0307F3000C050F10F2F5F4F2EEF9E2EAE806FCFBEAEAEEDAF0EAF5FD18EFFC00F6EAFFF6F8EAF2F50B06FB0008F7040DF0EFE3FBE8F0DCE1FD050DFB03ECF1D3CDC6DDD3DCBBD0D1EA06EF06CCCFD0E0FCFCFD0D1703F50CD4FE0303150D2D29232B1623F8F4D6FC040104081727402D31071ADCD5E1E1002121213531261F06F8DAE9E7EE15243306281F230FF7D8E7E1F01C251B1FEA0B0D0EFCD9EDEFBF041014ECE2E60C0803FDDDED02FEF80707E6E2FD01040101EEF5FFF704FAF4ECF20106F1FDEFE9D9E7ED01060E171108FEDBD8E4E9DFFFD2EFFE0C1611FCE5E1F107E0F2FBDACD00040DFCFAEBF5F4EFEEEBF8ECD1DFF9EFE6F4FDCFD7D6FFF70BF604020BF400FFF3070CF8040B00FDFEFFFCF5FFFD0E05050808FBF9FAFA02FB131116161519060607F904ED0621191D2C26211310F9FC0C07F517151D0E1513270D0703FFFDFD0303051E1B0AF80D100DF0F1FA0DF8EAF305F7E5EF02011102F90AFCF8F1F9F4FCEDF61E0FFEF9040B08FCFFFFF7F6EE080E0F01FCFD070A0D0AF906031012F8FBFF03F0FD03011418F80BF91300FBFD09F909FCFCF3FF0AF908FA0C080606FAF9FDF6F4F604FB0406FCF905F701FE05F708FCFB0DF703FBF8FA03F307090808F9FE0A0802F805F707F9F50C0AF60C07FA06FAFAF50508F4F6FF00F8F60A01EEF0EDF4F406030B0BFC0504EBD8BEC1D1DEF0FBF60CFB07F2E3DBB9A3BAB1CEF50BFDF7FCE8E5D1D7C5CDE1CAD3F0080109F2EBEDE7DDDDCFEBFAF0F8000BF4E9FD10FD0F16E1E71D06FFFEF60917080401FF030BE6F5F901FB08FE09FB0BF4F6E8F3020CFA0EF3F400FB0E1805E0F903051314F7F9010D05F0FDE3E7DF1313181313F60AFB0000F6F9F705070B0B0A02FFF902F9F9EC07FCFC0401EFF90100F808F6DDE8CBCAD9E3CAC9B4D1CFEDFEECF5D5D5DDEEF3F8F00C0E1CF9FFD507F51A130E0C0803120AFEF6FB0AFC181727230D031204100715FAECF6192A2613FD030D0802E3F800FBEF0F2A2821FA090E09FED7D803FFE3100F0F100F1E1500FCEAF606F7EC040E14051207100409F7DEFDF8EFE8FFFA080AF40908F902E207DBDEDBDCF1FE03F40606F9E7CBF6EBD4C4BFE7FC000610030EEBDA0AFEE2D1F80D171726171700FDE60900F60310161E151E0FF2F3FFEA0508F3FBE907F401FAEFC7CFFFF4FFFAE1D6B9D2D0D3BDC6B4BDD2EEFDDEF1DCDDDBEBEE07EA141A06F1F9D708060507FC0B1909031316F7F9EF0F0F3A373D2616090F041B1104F4FB193D2B332D191E0F04FC02FDFBE81E29332D10231E03F9E4D4080BE81F23181D0F1F140F10ECEAF5F2F10E16120D0406140403EDF407EAEDD203EE07EF05FC0C07FDD10DDFE7CFD1E8F80102EFFDFBDDBF0DE7D4B2D1EE040B0E03F9FEE1CCFEF2E3C50713221014130E0DF1D30200E4EE21221C1717FFF308EBEEFF00EAEDE6F6EBF4F8E9BBD8E7F2F7F5FA04FBFDFAF3030AFB040CF7FAFFEDEDF70A02111B07F8F50B03FD05F1000AFF04120718091310FD05E5F0FFFAFC09190D29412E28FE07E1F2E5D6ECF80C17293827370505EBEEDDE2F4F507F4070610220A0BEFDFDAE0F7F70A04FDF00113F2F6F5FCF9E3D9EBF3EBEFEBF2F201FF192C2E20110003F4EEE2EDE8F90E03151B2E1E1F1603F3F0F5EAFE0A070B2730210A111A0803FEE6FA0A0012152B1B19111004FE01F4F3F6F8E8F1FE24362F2A230810F4010703020603F907000508F404070300FBF908F6F4030809FDF80AF806F4FD05F904FDFFFCFEFD0B040209FC02040B02F2080209FD01F5FBFAF50CF8FC06F2E5FB1AFEFA00EE0208000708FCF7FF312F241708FBF502F60400F0EDF61A2F281D0FF602040B0C0A01E5052C3A1F271308F8F6FB082B20190C1B1919030AF70B0D0B0822302E11231C0CF7FCFEFDF5FCFD062C28101B0C02FD0802F50202F20212140E0401FE0B02F8000A08040F04F70CF8FDF6F304FD0CF6F5050401FEF6F805F3FE03FE0103FCFB0209FEF3F50AFFFFFF0D01F604F5FA06F5F7F70DFB03FBFCFB05F7FBF9FCF8FFF5FAF508FBF905FC04F90CF301020A191409040607F90303EFF0EFEE0F2F31361915FB070902E7E4D5DEFD1D33340B0807FA0108E6DFE2EBF6FC06010814030B0307FA03EDEFFEF8F2ECFA060D07FC1213FB0B190CE9DEEEFE0107FE040BFC05151A03E5EFEEEEF6F90AFD0C09FA021708FFE6F7FEFAF8F5070E07FDFCFD061201060203F5F6F5FB00EFF20CFB08FEFDF3030DFBF6F601FAFAF80AFEF5FBFA05080CFFF80806FD05F60AFD040407040606E4CEF1DFE1D6EEE4E3F1FA00F1D6E5CFE7E1B7C4FCFF05E6F1F9E7C3E9E1FCF3F3F5F8EEF90108F2FEBDF403FF0FF8080202FFFE1612E8BCCEFA070AF9131E171AFD0517E5D5E5F40C0703212A2E1B161D21E0CDF81C10FDFB191C12FEF70D1CE3D00022120C08140AF7F7FADDECC30E0C0E1F241E03F703E9EBFCF9F70D181E1B0DF2FEF4FC07F60FE0C4F9FF021111FE08FEFF06FF0DF2D2ECFCFD0D0D08030703FF0D0DFCFEF0040012231E0D1300FAF0100503E6CCB7E007F800F6F8EAFA2B0304080505F507F5FAFCFE0703030C05F7E9DEFCF2F9FB17EF040FEF0911DA04E8FDEADCEBECFC1418F7FCFECEF1F20905ECFAF1F9F90A1F06F4DDFF020F1AF605091222191513E0EAECF91414070A120E19123214F1E3EAFD0FFF0C110B0B020018FBEDE1EC08100F14071003FBEFDD03E6F2F7FAF6FDFBEC00FAECF8F0FBFF0418020203EEF3E503F0F4F8F60905030D0708FDE9F5F3F503F705D2F5FD0A1F131C04F504F6160FFCF00408071A090D0603FDF0FF0705F9F3E3E7F60915121509011B2A0701F4EAC7D4DED3B8FA0EEDDDD7F5EA0CD6C6D2DEF8F4011C05ED0513CFE5C7CDF4EAD9FA020009FC0B1804B5E1E5ECDCF7ECF1F3F90C2003C7A3F1EFF8FB03E8EFECE2FB1D29E2E9EEE7F6FDF8F8E2ECD2043217D6CFE4EFEEF7F3EEECDEC4E81D19CBEBDEDEF0060EFAF2E8E7F3EAFBCDE6F0F8EFFB0B02E4EEF613F4E8F6FC16F4F10600F9F71208F8EED8F3F4121606FCFD1706120D0BF5CACA02DFFC0C12111D1E0F072CFEECE0F00017FD140A09040004F9D90803F2DCDAF810FC08070BE9181CEFF502F3F300FAF3090900070606FF09F704F0E704F4E4F1201506FA03F502F3DBE3F8FC15182A22270BFE08EFD9C7CBE4ED0326333C231811FAC1D3CCDBD9EDF5202E2422180FFBD9D2DEE7EE07090FEE0812290FF5F5FEFDF904FA14EFDABFD9ED10EF04281A01FF1306DDC4CAD2F8FBE3FF1EFA041102E9D9DAE70005F4F60C2314F60400FAF5E3F5F4F7E6FF081B10100EF10401010811EEFEECFD14FEFE090A0D010503000907ED19FBFE2101151C140712061BFEFE02E8EDE51508010500090BEE0AF507F3F3D2EED2C7F506F7BFDFE200EBF2E0C1F4F9E517090AFFE80EF5F3D3E8FB02F0E7071716FCFE0D05D8D3FAF3F004EBE9F9F8F60E03E3CCE0E7F5F4EBCCBAADB0BEFC12DCA8E0F4F0F3E9D0998A93990216E8D5C8C8DDEBE7C6B19EB4AFD00EEDBCD7C2B2DEE6D0BFDAD2DB01F7FBC1D3C6B8D6E6E1DFE9F0F505E0070CFECFD6E3DBEDF50200060B09F2F0F1D3E9E8F204040E0E130CFCE4CB02FCF7F50DFF0A1121161803F40BE9D8EBFEF7100B1F171E18F0FB0AB3EAD3F40FEA01E70E03F4F404F9F402F5060BF8FBF6010B0C0908F601F6FFF90DFF070B0403FDFAF6F7FFFBEBF2E9F4101F1A0D06FEFA07FFF6DBF7F7F7F90D0BF9F9FDF5050AFF02EE02F8E8EAF1EDFE0808FFFBEBDFEBFCEBDDE7D1F0E6FEFEFF0DEDEFE40003E5D1D9DEFD0B09061800FCF51007E8E4F2FCF8020C0008F4EF070AF6FEF6FA07FCFFFCFE06EADAD6E9EEF30907060FFC0B020903EADEE5FBFB04F90C0615080501F9EEF8ED0702050A080701FCFC0C09FE0701FE02FA0C03010CFBFEFAF8080507020BFE04FC080B08FEF507060D0BF906F8FBFDFCF5FE07FCF70B070102F7F7070909FAFEFBF7F1E9F4F1F3030B091300FD0B07E6DFD8DFEF0F1D112209F80101EEF9EADFEFFB3233381F08FC00FEF1F8F0040A11384E5A3418EF0909FAF6FC0419244A514D38161302FEF80D242A28162833391F10FDFFFB091B24422A13191D060705F8FAFF040C0D352A201508FCF1F9F20DFD05180C1BFBF6E2EAD5D3EF03F60AFE0C0F1D09EBE1E4D7050B11FCF50D0D02100A01EBDDFAEBF915020608FAFE020B0300FF06080F0C030606FFB5E1D1BFC5FA12F9DADDF700E9D3D9D1F8FBF90602F7F8FF0F08FFCAF9F7FEF2F0EFF6F9E5F70AF702C4F9F305F3EBE8E1EEEDF808FED4EE101B1A0DF2CDE1CECDFF1600E506201F170B0802FBE8C9E119F8E5FA0E0A13091303FA09FCDA00F5E60E00F6FBEC090DFF090D02DC03DF0D04FEF2E9EE020F060D1AE809140D11FBF004F3F9020011150300F5FE01FBF6FAFCFD0AF4080E0C05040203EEECE1EEDDE5F3E7FCF1FDF2FFFBE8EFF1E9D2D4E5F2FD11FCFDE7DECCBFD6E6F2F1F3CC19EB08F5F2C3DDE0C3CCF215F3CAD9F903E4D5E4C9F9FAFBFC1512F8F0FDF7F7BBF2E4FFE9F3FD01F8E5F0110105BFED0CFEF8E9E5DAD9D909050ADAEF161E1B14DDB9C5BAB4F1080DEB0F2E24231902E7EBD5B7DE19FAE6F0F4F5040D16F60701D3D3F3F6DDFDF8EFF603020A0BFD00FBE9FFDB05F5E5DEF401FF0D03020BEC03FC0F05F3F3F4EFF9FD01FE170B0AF003F6F9E7F1F902FAFE1121F80C070202F7F6D9F6F7E7F50810FD05EDFFE8CDE0E3D9DFDCEBEAFAFFF9F8F9CCBAC7D7DFF0E8ECD713F002000703FF1A1F0A0F0D182400020BF910011C1810080F050A14F9FA08010AF2EDE8EFFC0DF8F5FA080CF405EAEAF3EEF2F0E7DFF1EBDDFAFEF6D9EEF9F7040D0F0C0D0200FAF8F3EDF603080B2E30240D13FD03F6E1F1F2FAF3F92C33181204FC04FBF5F5ECF0ECF5391E0C0501E7FEF801E2E0E2DCE6050E0607F9F6FC06F7DFC1DBEBE5E6FF0002F3F9F2F2F7E1C9D8D6EBFF101E1AF3060302F4F7EFEDDDEE0E0813FDF4F20409FDFFF402F803FC05FDF905F602F805FCFB000DFE08FAFA07F602FA02F9F9010BF803FF0B040EFB08F8FE070B020EF202FBFBF5F2FDFEF8FDF40101F9E5F8FEFCFCEFF80BF80A05FAFAF5F3DF011011140BF9FE05F7F8F6F8F3F1171A1B2204110A0A060205FCFFE70B282E120D04FA0A0601E7ECF8FB0330270CFFF506FA0707EBDCDDE5F3130DF50101F404FB06EFE9D0D7E7FDE6FBFFFDFCF9F70AF3ECE0E5E6DCF0FC0504000D03FB00E7D3F9DFF4F3F7F5F5F8FB0002060EF8FAFBFCFCF4FEF8FD070A0102030FFA01F8FE02060CFB050B01F6FBF5010705F7FF090B000305060000F9FF05F8F3040000070CF6FCFFFB02FCF20407F600060600F8F601F30505FFFAF6FFF3FF050700F803FE09110D140E1E0E030A090BFAF600120D1324291B1806FA08FC0902F003ED0924160FF8F4FCF70DFE04F3EBE7130DF3EEE2F6040C031002EFD9E3FFE4F3F3FC0901030C03FCE0D7E0E7F8FEFFFE05FB090E07F9E0C5E1D70F1FFE0CF90602F60DFFE8E3D6FD0C120408040D02F5F5FA050D0A000A0202F8000BFCFD00F906F605FDF6FC0D0708FE0605FCFCFBFAFB060704F408FEFBFCFC0F2E23200FF20F251E020307F81F1E291DFB0AFB0200052F061308EEF007DDD4DEEAEEFD061702FCEBDEE1E2CFC4CAEBF7FA0A101A0202CED8DFE6C7D9E0FF060B0DF5F1DCBEC3E1DBCAC9E1F50708F6DAD9FCB5DEE6E9DADFF3040A0D1A07E1F3ACDEE4F8F5F10415150A1009EAE5D6EF00F802F8FD181707FD12E8F9E6E8FD0624130B090800070A0AD8C7DFF6031F1D250D17FDF308F3FDCCA6C2F50D111E11F6FDEBDFF9FDF7CDB8C2DEF6F605FAF0DED6ED0AF2F8DED5C6EBC4D8E4D7E2F804060DF7F90A0D080A08FD0E0CF703EDF9111C1D0D22FF04271B0EF8FE04F70013FAF8EEF0E9FFF9FF0F0710F5EAFDEBE8D6D6EFF3F9F90911F7FBE500F0D7E1E5E6FE07FD0804F8E5FD0AF3D7DED2E9F90AEEAA00FDF50805FBF2EAED01050F1AECF5F0D207FB11F5F6161712130F0501F9C5FBFD0A12F117110D0200FFF6F9D2FD08091400FE0304FB06FEF6F4D9EEF507130D111A05FE010C06F2E4D5EDF5051019120907FDDBF606E5B8DCF4F001FC01FC04DED1FC0BFEDED0D0D2DCCBC4D2DBDDE8F3F506212B41112E191922223806E811E1061F1D2F1412000A0F14F8F3F4E2F00604EE07091B0808030B0CFAE8DFFC0208F7030B0DF6FAE7D4EBF4DFFC0403F2F5F0FFFBF4F5D7E6C0DDF6FFFDFCF8F5ECFAF6DEC8DFE4FB00F7FCFF0700EEEE2603E2E2C1E60207FDF3060E081A1508D5EDBDE2F201F30D120A0F221203D5ECC3DAFA0510FC0F17080903FD00CCE4E8EDF318160D1404090808FBEBC6A9FD090714FCFD0EEEEDE4EFF4E2CEBFCBF0F60602E5FFD8C8E204EFE3DACDD6E4C6C4D2CADEF6F20010F90301F9FEFB01FDFB0E00F700FFF8F5ED071C161A111A191207F7E903E5E7F0EEF90C09030D04FBF3E7EFE7E5E401F60C261309040EE2F2DCD2E8DDF71B160F12FFEFE6EDE8BEE3DAD9E91503FFF8C9C7EFE7FCDCEED6D3FE101B04E0EDFBE9F7FCD6D9CCD3041515FAF907F2E7F8E7ECD1C5D9E808120F0A0404F8E2DFF5E7E5DFF102161D0AFE080DF802FDF5FA0808121E060808080AFDF4D5F7010F1100FD110CFBE8EF07FBC6E3F5EAE9EDF10CFBD9E3F1F4EAF2E6E8DFCFC1D4D7F5E0F30A030A220B261928211210222A11F3F6F9031E3A262A2E291F101A34F7F6FA04161928170D0F131102FE12FCE40F07191D221610EEE8E7F4E3FDECF9021E11141CFCD3D7CFCBD2F0C0E90B1519171BF6DCC9CD0F00FBCFD827091830080AE7E7FD2000DEC9E90920232A1C09F7F9080DF90ADADA041420180B0D1B191313F4F9EEDAF6F4FD18052210F70FFAFBF5CCD3A7F2F70312040902090AE900D2CAE1E1E5DAE801EFFEE7CA0EF4D0BFCFF4D0E5D7E8FBDABFDDFA06F4DECFD8D0DCCFD6D7D3F2F5F401070B0900F6F6010108FF0DFB08F5F9F3030709092D0A0AFF000DFFF4FCF6080C1A180A0A010BF5FDF9F4FBFE0A0B0D161810FFFCF2F60102F501090608081A00E4EEF2000101FBFD05F9EB031D04E9DEE3E90AF8FAF103FAF30A04F7DBF3F3FFFCFA01F1FFFEF6170803FA0CFC02FE05FEFD1601FA0AF702000FFD0D0D0503040A01F3F8F10C160E09F8FC040B00040114060F06FA0C0F08FE09F9FB090310FB06FE010005EF09FBF9FBF2F7FAF2FAFBF30904F3F502F8FEF9080602FDF4FA0BFE0405F809FFF909F9F608F90502FCFD0B06FC0DFD05ECEDEAF1FFF8050609FA0B00FBEFCEBFC5C0E2EDFCF5FBFE0103FBDEDAC1CDE2FE020A0C09F50AEEE8C3B8C5D3092E37280403F8F4E3EDB793C7D30F3630F7F0FB04F5FEE7BA89CBE60F2024F8EF000CF6FFE0B994C801EB02EEF8FC0800F3F6F4CDBCE40002FDF4E9ECFF03F3EA0701E7E70715F200FD0600030707FE0A1C1406EFEE0111FFFF02FDF30D1E2623140102FAEB06F5FE00E6FC000AFA0AF7110BF00605FE060BF7FC03F8EFF800F7FC0002F9FA110D2D0B1D1F0E0D2D34FBEB0BEE150710120209040919111EF3FDE709020A0DF5F8EDF0FAFF200D05F0020DFF01EBC9D4D7E6F2DE04FCE1010C06F70BF1CCC2DEF2E9CFFBEB0E0C0B0AF004E7EEF30310F008F10515FEFCFCF5080500141CFB02E3D41E09041D0E12FD130F181708E4F31A0C031F1B221C11090E1AFCF6F21016111610140C1109FB120EEDF9E708141C090104FCECE90AFE07DCD904FFFFFBEED5E6F0E4EDFDF5F9ECD5F6F1CEE8E3DBDFCDE202FF05F6DED4E1CCC3D9D2D5ECEFFC070D282E16201E1B212036FDFA00F11820181F1A1A07090E1F1BFC00F0FF1C1319F4F1FCF0F4061305FCEAFE180B0EF7DFDCCDE0E0F5FF06E90D1B180D13F1C8BCDAEBD9D2F6DF131D220305F4CDC6DDEC0DE50BDF0619110909F2F3F0FA0C1A000DE5D12C0F16221305FC0D1807200DECF81C190C2213110C090C052800E3F01A15200411080C1101102007DEE8EB08141910FBF0FAEDF7F4FCF8CFC4F801EEF7E8EBEDF2D6E409F9F0E7CBD6EFDBECDDE4DCD2DA0004F7EECCDEEFD6CDDCDEEAF0F9F70308F7FE0408FD00060B060306F7FDF9F3E4E0EBE7E6CB03FA0DFDF9040206070B0C01FCEEEEFCEA020F0912050C1A1B121A0C140E0004040F1F171101060B1C110F19FCFD0A1F1E11FBE0C7EB10FBFDFBEE13041B14EEE0F7D5F3F803120B0314FE07FE041A18F9F70B331F03EAF50FF1E9EB2B07FF03041D18030700FCF1F500F7E401DFE2FF0E080CFE00F70300FEF8EAE3D7D6F50308F70800130CFCEFD8D2BAA9ECF7090B0812F4F609E4EACDCAE0F60DFA04FD0F0F020A0407FDFAFD0DFCFF06FC000B0308080603FA10FE020E01FC0103FDF900FB070EFB04FB0F0506080502130A090B081703120E02FCFD0B1310FE0CF6F6060D01FCFB1102FF0109061602F40F0B06110D0610F9090F1314FAD7F4F7FD1001FD08000A181D1BF0D6F3FF03FFFF0D0601FF262D1208EBE40E0A0B1008FD02000E0E1910FDFA0501FF0F0C0FFF0F1117161C0AF60D11FDF9050CFF0F0C0112F80EFD120C110212070905FA1409FF0201FBFE03FE0BFF0AF600090F0A0BFC10FF0B03FA100313F90607FA070101FB05FD0F0212120EFCFE0DFF0703FEFA0E02FB0A110504000DFFFF0C04010FFA0E080D020A0C020B0204FF0FFE05080808EF05070503FF060304070E0BF0F8E9F40E03E4F0F80EFFFB0DF8EA06F516110AF8F0FE010D0D100D05FA22312220FEF7FCFD080D0E15121B33452001F710F9F60BFF00FD0F2A351A0AEBF5120FF5F6FF02040E0F181D07EFF70819FDFCFE13080413230403FBFDF81203FD0C0804FB120D0604E4F6FB100B0605FB02060A090AF7FB0805FD050FFF10FB0B0E1116FD0E070CFD0E0501F9F9F0D1DECEE5DDF1DDE8ECFB0905EBD2ACBED2C1D9CACCD2E4E1F502DD131AFD1307EAF2E5DCBFD7EF110D3314241A0A0BF8F2E3E8BCD22429172C30150B0409F9E4E1ECD522051D1A0F08F50600F4F806F2EE362215FFFEEBE3EAF0FC0901E4EE1713FADDDEDBC1E4F51304F1DEE6E701E3E1E8D7D6E8F8100FF7F5C917E0FCD7E2DCD9F3071007FAF7F4D9D6DBDDD8DCE1F8E4EBFBCAD6CEDEF4F5D8DADCEBEAFDE2E7D3CBF3FF161C0FEEECF609F7EEE9D7C0F100DD0AFB1AFC130412121E08DA0301FA050B100B0B050C0A0B0F01FA01F5DBC3ADEBBCA0A3BAFFDBFB0D01FDFCF5F905E6D2DCD3E9ADDBFB1EF5263410251005F6F6E4DDE0FA1E0C0B051103090D05FAE0DFDFFE1420121613070C1B11F4F8E800051015110403F7EB03FFFE0600F012142714FFF3DAD8EE0A1402EFF506FA08E9FCE7DBE4DF071E06FCD9FDF6F6EADFE7F203F30008FEF2F40105FDEDE8EBE9FBE6E8EDF0E9EAF8E902FCE6E6E4E7F7F4EDE4DDD311EE181907EBD8F8F9E4D1E4CDCBFAF42D1101051204F90E07F8F3FC040B05F7E9E6CFD6E0CFE5CBE2EFF602E4F1BC97A1BCDCD180CAEACBE6F2FE0307EDDFEBFAEEFEE6FDCCB324F2EF0B0EF5EEE9FAEEF3E3FDBD230506FF0AFDE2E2F0FC1410E3F3181C170408F2DADCFD18F9F5F20411271B03EDF2DEF700FD17EA0302311E07EB09E7D9F1070FF3EFEEE5E811E9E9E5E6F1EF09090A0BE9E2160CE7FCEFDDF9F1F2F601E8EED5D6DEFDE7F3FA06F5F2F6EEDFCCEBD9FA0209E9F5F4F9DACFD0E2CDCCED1E13060800F900FB00F0F3BEDCFAF2050D160310FB04F91006E90B07070D1411121110061013FB090908F0ECE9F1E8F1D9D9D5D1DDE5F1F600F7FCF60300F4EBEEDADDC3DCFE02080009040D0401ECF3F6E3DF1B0EEF050E04FF0A0BEEF402F3F80C03040207050AF517F41201E6FA101F13172226E5D10C0C0BFEFB0D1116121A290DC6C7F90C100F0CF10002080C25FCCFCFFA0F0FF700F60AFB1A0B00F3E2F7FF072213FEFF10FFFDE7F4F0E8DDE9E3F6E7F1F8FAEFF5F1F4E5E5E6E9EAE9F5F7FBEEFE1902FDF4EE04F7E2EFE9D2FCF515F1FF0D0CF50D00050C190B0701F8F601DFCCDCE9E9EDE9E2E30201F9F4BCC2B9ADC7CA9C93F4CEEDFB06EDDCC7D0E1D6F6E4E2D9C7D0F7F8EAD4DBD4E3DBF4100DFCFADF2BEDDDDBBBCCD6DF0C15011BEEE92818F4E2C8D6D6E015170C11D2E719170900EC05CAF3101314F5CAEC1E3618142222D8010715FE150BAE011204273918E8020E0B13FFECCD04D60AF800161312040115F0C9DDF901FC021C121A04FAFFF3C3D5ECE5CE044028140C07FBF8DCDAC6DA05DF282C1918130E0A040A01E4FA0914120C1E1B120A29010926F9010F020D0DFD0E0D0E000505F90F0310FDFE0C0405F80A0BFD0A0F020FFD0DFAEFFBF5FBFFFD04F7090AF90702FAF0FAE7ECEFEF02011309F7010DF2E2E9EEF9E9E105F2FEFD04FEF6F8F4FA1408050D030C0CF9FDFE05EE061425210A12FD080905FD0C0E0C0F222C05F3FB010418FDFEFC04FD19391AF7E3FE100411FFF7FD0304101E1CF6090003FD09F41007FDFF0F0C09060500FB00FFF6FD0F0EF30006FE060A01040206F60210FA04020B0201FFF50A04FB06F7FDFF000015020D07060303010DF8FC0AFB11FBFEFC100DFE020D010CF80CFE000DFC0711FD0E0CF803FB01060801080D0E130E171603FA0FFDFC181D1F272B23FAF01004060E06F30E292F261908F2CDDAFBFDFF02040F20220100F6DFC7D30100120F1CF70D15ECFE1404E7EA080D0914130BFC0FECB1FA0D13F0091B0BFE0801070CE3CAD3F1F8F3F7FE07F80F06F5FEEFE1C2E9FDEC0A04FE030B0500F2CAD6D2EFFAF9FF0B0D0907F7E3DAD5CE0100F7FEFC0B09FA130DF2E8E3EBF90FEAF9F60802100EFF05F8FBF805F60D0310FBF8050402EAE8D2CFDED1E8D1D4E6EF14F3EAB4989DD5DFDE9BD9ECCEE21123F7FC08FC0CF505F6F6DCBABD07171A222730150C03060006F7CFFBFE15271F1608EB060CFEFEEEF20F05F204F700F6E9F9F902FFE3C5110CEFEDD4F0EEF20509FB09EEE30DF2D4D8EAD5EDE2F70E0E0F04C102F1D6D8F7ECEDF9FE1211FFF4E009FDE0E8F9F2F8F1FA00F8EDE5C10BEBDCD4E6E5000405FCF3E0C9D804DFEACFE60F0A0AFFFB05F3B6E4FFFE05FB11061D131B030204CEE518001CFE1701041F1BFD0F17FE0212F402F3D7D3DADED9D8CFD1F4FD12F1DEBE999BDAE2D488EAE0C1E90825FDFB0AFDFDF800E6E1DBA8BF0C281321211A0CFAF008FFF2E9D70408011B0F1AF4EE02020C0AFCDD0B03F5EEDBE1E8F2020706FEEDCC1604E1DCD4E5F8EE0F05F9FDDED201F7E1E2DBE6FBF1F70B1117F1C005E7EBE2FEF9DEFAF91508FEF1D80E13E9F1F7F2FE06FBF8F5E7CCD105F9D1DDE6FC0606000101E0CCE006CED1FB0B122610141201EDB7EA07E90B1C2F162824170B0F08B9E30CFF0E0A071707260FFA1616EDF90501FAF4FEF9EBE9F9F1FDF503F2F7F3F30804F60101F5EBF5F8F0FBFBF7020F070A0A13FD06FAF910F6FA03F00506FC0B100703FF040A07F001E70CFF0B0A06F6021001FDF900F6F9FDEDE0F2E414202113F804F103EAEFE7E6E4C3061A1EEFCDF4F2F20CF9F907ECE803F8DC010000FBEEF0EFFD0103DCF0ECE5F8EFF2F2DDE3EEF9E1EACFF2E6DDFBD8EFF6EFF5F1E2D8FCF2F7F2EDE1EB04F1EEF8D0EDF7F7131C08F1E100060603E9F1DAFCEA000700E5F0F00501F1F6F6FEF4EEFFFD00ECF9FCE9F6F1EFF0F000F1EDFFECEFF5FAF1EAEAF7F8FEF9EF0705F002F6F501ECFDF8F4FAFAF0EFEFEFF103F5F603EEFEEAF101F2D5EDE6FBF9EDEEEAF6F0E6EBF3F5E6D6DCF1F3F0FD00EAF8F7DBE4E5DADBD7E5E5FAFBECF8F2F6DDF3E2B6D5FAF2E9E8ECF4F2FAEFE5C6BDD6ED02F703F6EEF302FAF1CCADC0CFED0608FE00F9ECF5E9D7D6BBBED0E8F9EBEEF9FBF5FFF0DFCFB5C4BEE2ECF4FDEEEEFD01F2E9EAE0E1D6F7F7F2F4F3FCFC01F0FD00E8EAF6E401ECF3F2F9FDF0E9FAEAFEF4F8EDE9F6EBF902FFEBF0ECF9ECFFEEEAF9FEEBEBEAEFF80000EFFDF6F9F0F401EFFAFBE902FAF7FAFF0802FFF7F2FF04FAFCEAF5F7FAFDFBF3E4F0F4EEECF500EBF7FAE5CBE2E5F114F0F4ECE8FCFBE6EFCAD1D2DF062300F5EEEFFAFAE9EBCFCBB7D815161A0804FD02EAEEE6D1DBD0E905160209E800F803FAEEF6F1D0D201F5EDEBEDFFF5EEFBF2FBE6D0E9FADDF4E2FCFCF7FEF9E7E9E5F1FB06F0F5F60000F9EAF1F6EBF11219FDFFFA03ECF6FFFDFAF6EAF5FCFFFFF2F1F5F5F801FDF2EBE7FBF2FBF4FFFEF901EAFDFFF0D8DEE2E9C9DCDAD4FF01FEF5DEE3BC8DD3D4FB0B010CE4E3F2EBE7D706D40C061D0F1614F906EFCBFED7E5EEE8F61911191B1107F2E2FF0B0810182D11081E14020B02E70CF9141D3E3A1306E9040D1004DA0C0A1C3D3B3813030D0C2012FCD5DC09021F0B32150E1B171C16E9E7FEF2ECF0050F102B1E0F0AE0E1E2E1D6D5E7EA23121603F00203B8ACD8F5F6020105140BF4FB07FBD0E8E4F60E11170D07FCF7040EDBC10AC4F5E8FB071007EBFA19FEEAE0FEDBD3E7E1E3F1E8ECFDDAAFC9E4F4ECF4FFF7FBF1ECE8FCF3FDEDFFF1E9F9F9FFEFEA05F504FAF114FDEF03F20905100915210D071EF3EDDE040C03F407050C1512031819F4ED04FF0706141BFA140F1010F201DF0CFA0CFA2438170B0D18280905E8F20B151B1C2612EF011608F8F6EFEA04FF082014FE150D051607F3DEDDF6F207101109130D1C11E2EED6E3F1F4FB0F200F1502ECF7F0FEDDF1F7ECF5081B03F804F9FDFEF1DFDD010CFC070015FCFBF4EDE1FFF1F1F3020000021308FE121401F3FED6DFFAF00708FE06FADDC9EAF80905FEDFCACAC0C0C6DDD5C4DFD8F8D2D4EB01F708EE0BF2F1F4E7FFEBC0E5F806052229120B0AFB1AECD8F1F2120A111A1B110C0AFF0703C4EE140B1412150817140C0914E7E1030D0E04F90617151E29271513C902F509142B11170A181D20FF08C7E5F51C121D2B161D0A0DFC0AF9D5E00E0018171F11FEE401EDF5CAE7E2F713121E07FAFDFC00F1EBEAAEDA02F9FFFEF8FFFD0E0405ECC4BCF8FEF3F10B0F1D19FF02E9E7B7FDCEE9E908FD0B1B0E07030107E40AEBC9EAD9FAF7FC1002ECC4D4F3EAF60001EFFAF9FDF1FFF803EEEC05F0DEF7D9D2F10902FCC1E001F7EDEECDD20529201D191206F6F203E4F9FB05190E061B1005FCFEFCF5E8FFEF00F9FF0F0C140C17FF0904E1E0EDEEF9F6EBFD22251D1B10FEE1150AFDEFE2D6022A35211B08F9DFF70E06F60BEF0A1A170A00ECF1DCF01508180403FE0003EBBFECF2DBECEB05050E01FEF4EBD6F202E5EAE3E9E4E9FAFC0A02FCFFF8EED7E0E6F9EEF9F8110B13000201EAEFF106E4E4EC010200FEFC08F8ECE5ECED02F3F6E9EFF2E3FFD3DAF103F9F505EDC1C6D3C3BBF6DACEEDDD04FAF3D4F5EAECE2F5F9C7FA05FA02EED2F213FDFCFE150D07FFF6FAF5C004FD2314031217FA0BF21204D4E9041F1F05040B090209171BFBE2DF0D0607EDDF14302522170EF8E400FCD6D4DBFD1B2C33271C08F4E5E4E1E2FE1D2A23F9FFF0EFF5E2F800E2333F3F3706DEE2DAE30D9DF1AEFC3535322CFFE7FD061915BCE7ABF2391718170314071616EFC9F99E05ECEBFA152229131921F7E305DAF6C0DCDCF105321C09E9C7DC07E8CFF3F0F5DFDCC9E996CAFA01F2EDF0F8F7FEEAF3FEF0F1FAEAFAFD02F8F2FB01F5FDF9F2FB00F9F8FCF2F5F807F8FBF90002ED03E5EEF8F0F5EFFF0106FE040505FEF600EEF2FBF3FBF7ED02031015F70501FEF2F1F0EFEEDDF513151905FD01F0F10003E6E7DAEB07FF0003FAF0F2EDFAF302F9E00A14F4EEE8EF02EEF8FBF80A14FA18FDFBF9E902FCFBF2F41D1A240F110D0DF6FA0AF5F8EDE6F1F613001907060BFB01F3F3F606EEF0FC13FCF8FEF20509E9FBF8F109E40FF710FEF7F7EEF6EFFFF801F2F2F6ECF5F3F3F1F1EEFAE8F4ECFAF4F8EAF6EEEAE8EBEBFBF401F1EEFBF7F5F000F5FAF902FF00FA01FEE8F60CFAFBFDFDF6F1F0F6F5FFF6F300070BFB070A10EBFCFCFEECF8F6040A081304F9EAEFF6FFE5F4F708161B2D01F503F8FCE3FA0BF708161110EEEFF0F0EAF3FA02FA06F8F8FCDB030A060C09F1FFF0ED08EDD1D0DF0D353822FAF8EB02F6F0D3B4D0F81D23FCF7FAE8F5F6EEF5DCEEF7221505F5F8F0F3F7FCF5FFFE0320260BF500E8E6F4FCF403F306FB020EFCEEF6FD00ECECFFE8FDF5FCEEEF04EFE3F8EAF4EEEEF902C3C9DBCCC1DBEADCD4EFECFAF1DBE70B13F50102ECE8F5050CFED3E9F2F2EFF90D00140300F0F1F8E2D2DC0FEAF00E060AFC070BF603DFEAFEFD0E15140A010B001A13F8E91619141E23280BF50CFA1516FADA0C28262D2A1C02F5E2DDEBF9FDE5DB02FA112C1713FFFCEFF507FDDFF1F6D0010C0C261C0603F9FA02E3D607F0FD0B251D0A0D0516CD04E2EC231E1E13180B0A03130DB3FBE5EF1532221A1201F600FF0CCEF9FFDFF50A04ECE8F8FA0DE301E2EB02E6D4EDDACDE0DBE5DAD2C2F4F709F5D0D3D3CEAECDE1CAC6F6DEEBF7D3EAF910F5F3EFF9F0F6F803FFD4D4EAEFE7EC0C080E0603F501EED9E5DD09DA02FD0C01110BFC0BE9DCF90909021911041109120000F7EB162D252025230EF10B01140EECCE0C251D2F2D21EFEBE1DBF602FFDCEFF4F016161303F5F9EEFDF7FBE3E2FFE7011503110F0CFA07F6EACFE311080E080C0A1A0A0212CCEFECF82B27131A1D1502051513B5FFE5E2203322120F02F00D0413CDF0E7DDF8F7E6ECEEFCEC10EE04D0F2F3E6C5DECECAE7E2F7EECDC7000BF80C04F904F8FAF80BFCF5FCF7FC0708F9F3FB01EDFDF1E1E0F2F909F5E9FF161313FD11050DF60105EFFCE8FEF511192420F4EEECEA05FFF9FFEE10153814EFF6E7C8EE08F2F31200F5021B0F1209EFF1EC030105F2E5EDD90C12FCECDBBBD1FBF6E8DAE6C8E215FAD6D4D1D9DD05F8FBE1D3D91115F0EFDCB8D3F1FD06E1F4FA02FD0408F4D6DA09060C0CECFC061E16191E02F0D8F6FFFCFEF8FD0608101606F004F6EE09060B07121301EEDEE3EEEEE8EE03F9080707000203FEF5FDF0F20A03FDFD0AFBFD0503F8F202F6F5FAF2FA0206F3FB060103FAF7F4F6F10A02F5F8F6F5FF00FEFEFB0802F7F30AF2FD0104FCE9FA0FFF02F70302F20AF402F9F7E6E1CDFAFE0D0C0207FFFF06F8DEBDC1D9F7E904F202FEFDF8F2FAE2D6C8E0F5DEECF505F70BF50401E5E6E6CEDCE2E6FE02F6F407FEEFF3F7F8F0E6F7F70C09F4F70AF8FC111113FE080901FF05F409FF040C0D091109FFF8060BFC09FEFD02010BFFF9EA09F4F50501F5F4F205F8F1F3ED04FBFD05020501F804F8FFFF04F0070606F4FCF2FB0901F200020AFAFDFA02F70AF4F5F108FEF3FEF60004040008FFF5FAF2FCF306F5FBFB06FD03FD05F908F8F600010317FBDEFAEB08FEFAF504F7FEF8F8F7EAF1FBE60BF600FF00FE03EFE9CFE2EDE7DCE6E8F509030AF9E3D1D0EDE1D1DEF2FDF50608F6F6ECCDCF1708EAE8F5FAFBFEF4FCFDDFDF042505F9EFF20B05070405F604F8041F1CFAE7EC04EF02FAFFF7FE081E1500F2FAF4F30BFBF502000406F202F1F6E7EEF901F7F207FAFDF301F5F1F9FCF7F6F6F4F5FBF80D07FBF904F70409080905000305F4F3D6E5D5E3D8D8EF07F8F1DEEFDEDBC9CDD9E6EBC9DFF1F506E7CC9EA9CCDEEEF002F3BCD1DCD9C1C8D8C2E819211B332302EDDDEDE1E4C8F004142913250303ECD4DBFED3FCF8172728151F04F7F3F0CEF7071D042D1313F5FDF2F4F4DCBD08101E12220910F2E8F6F0DCC3C8F01E0D21191BEDF6DBE9EBC5D3C5BFFA0C1E23FFEFE9D6D0EBC0D0C5D60AFB05F4FCE9D8DFEFF5030AD2D9F8EFFFFAEDF3E7F6EBFE20F2F00508F5FCF9EFFD050A101210EC0122262D100A0D1010031C0EF4F804FAFBF8F5F4F805FEFDFB0907000100F3D6DBE6F1CDC7B4CFE4F7F3FDE8EBFAF4E402E9E0C2CBA9DDF9F4E4EFEDF71740241303FCE0C607EFEA05050B1E2C1513161507D8F6E3F1080C1706210C0E0B02EED804EA1109FE121E28250E11EEEDF307E30FF40905082F2804E5F7E7D5FAE5F3F20A05171913FEE3D4E6CAF5E1F3F3021A021D05EAEDE0E0E0F3ECE9EE0FF40EF7FDF1F7ECFD0506F2ECFB070CEDE3F7F0F5F1F41008F909090B05FDFC07FF07FD2611F5F70B0E0B060DF4FEFFFF0F04F3F5FC0704E5CDF4E2E9E3D7D0DDF6EFE9D6E8E1CAC3ECF2E5F6EAB4DEDEF2E1B5CE1116F9E4F711F4EFDEE5CFC6EA080D1B3A3519F3D9D6E4D9E3DC05110827252516FCEC06CEEBCBD812030D17132510F80FF4D5CDD0080B09FDFF0C32060A02E1D7FBD70EFAFB06FD190EF4FAEBD4EDCBC3F50BF9141C12090EE9E4F1D3D7D7F4F7FC06FEF8F9EDECF5E3EFEEAE01021009F70A00F6F7EBF80717B9DBF90C0805F5DDE4DFF80914F2D6F7F80E0107F7F1F80808FB20D8FB0E28041B1318091B16171AFA0AFAFAF4F00702040002F803FDFCF7F6FAF0FDFAEAE7E9DAF6F5E3F2FAEAF6F8EED4EB1611FEE5C5B0D2ECFAEFDEFF1E37392A25F6DDE3C8FCDCDF1212101A17151505F2E5E2EDF2D7F2F1FD0F1414FDF7F4E9FAF7EAF206E8DDF61649E8E9F4FF04E3E6EDE4EDE7FE4121F5EFF8F8C9DEEBF7EAE0F619411E06E9DAF9CAF2F4EBF50213301D1BF2E3FEF6D5E7E5F2FE1F1A130CE1DCE3F0E310FEEEF2F70908F4FAEAF6E8E30D2311F4FB1511FB03FEE301F51417FCF705FD16282008170C06241E00F9F1010C0600D9EBF3E6DCE1D1EDFBF303E3F6D1E7DDE6D5C1E4EAB2DEF3F4E5E7BFB7DF0DECC5D9D9E2C9E7F4E6B7022313121908E4DAE0DBDEE2D5FE2F2D2A282400EADED9DEE7E0C7192C1D0B130FF8F5F909FFE5E6F51E040003F32306060B10EFC3D3D306F1DCDAE911FC07210DBEC703D0EDCFAEC1E00709091E09BBF407E6E1F3A4D6F00C05F5F5D3EA0BFCE2F4FEE1EFFDF90AF5E6EB1E03F2D1F203050DFFF7F0E3FAF216EB01F01A0F0B180AF2EDDFFA1702F707E8370C17100A22142D21F9F8FAFA070309FA0A0AF5FEFEF9F3FFF40703F80C0C04FAF604FC03F4F60A07FCFC0009E801F3F2EC00FFF80AF50208FA030906EDF3E6EF02F1F50609F7FD190F17001CF3EC01FDF9060109050000F4F101EBFDF9030B0005FBF204E5F2D6F5080A0105FDF40D08ECE5EC10EF0811020BF6FC0806FD04ECF103FE000D0B04FB04F702FE1106F90F0B04F2FAF4FA04FEFC09050C01FBF0F5F9FDFD050CFFF8FEF404F5F9FD04FAFBFEFDF7FDFEFBF60CF2FAFAF809F9FD0CF709FC09081006050B07060703FE06F4FCF202F1F709F4F209F209FDF602F3F3070AFCFD00FF0B04F508010503F206F1FDFD09FF08FE09F8F606FB04E7E8EE0C1114F71CF8F4FF00FBF7E9DDE0F1F70B1622080BFFF3F0EADBD7F4FEFE0020F6080FF7F80104F4FC364501D5E0CF0707FAF510FDF40D2B4305CAABCFF90C02F1F4010413432101DBC9EDFC080101F2FE1C2C1D12F2E5DBF3F10800F0FB0A061C1EF7D7D60905100502F0ED08FEF8D5DAF604FEF8060003F7F1F9FEE9EAE6F7FA0DFF070B0AF60502050706011204141103F2FEF304F6DBF7DEDDD9D7CFE3DFF3F5F5F6F1E1C2C2FCF6EBE6E4AFD2E2FBE7D3D0E7E3F3F1FBF7F7E5E2D2EAD6B1C9B7B8E005140406FEEAF001D5B5C0E4FEEE0A0F1A050AF9E6F5D9FE051702FBED090D19211C06F6E83526151CFFCFFF04021E13EEF6D333201D09F6B802FAFB04F9B908DC07112908DCD4E7F8F3FCDEC6FED4E111F4EAD8F0FAFC01FEF60AFBC6E4010C07F4FDF1FCF3FB0C0304E6DBD8D9F3F906FF0B0E1612F1F3F5FA160D0B0A1C111D0B1911ECFA0BFC122C1C2C0F171E0D161112F101FAE1F7E4E7E2E7CCE0E0E3F2F0F3DFDFCFBCFAEFE1F0D9B5CFE7F9E4C1C1F3D907EEFCFCF9EBDED5F1D6A9B0B9B0E7FE0DF80500EAEBFBD3C7C9E6E3FEFA0D0E0BF9FDE3FCE301191D1608F8F50F0E1F15FBF5D93E301B16FBBC070F122401EBF2E834291412D8A9F6F9FE06F1B8F8E6131E1F0BB6D4F4F70D03EAC8F2C6E00EEFE6CDEBF9F509FDFEF1F0D4C604F7EEEB04FAF40401121601D5D7CED6EA0A1110FE0E180E00F1F3F30110F91A1D1216161F10EF06FDFF0D371E221D1332171C020C\"\n", " }\n", " }\n", "#-}\n", From 26f7defcb89022a5ef30adbbbe7ab02a9d544d57 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 6 Aug 2026 15:39:34 -0700 Subject: [PATCH 05/15] update to latest extern API and cleanup tests Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- pyproject.toml | 16 +- tests/conftest.py | 30 +++ tests/export/export_utils.py | 32 ++- tests/export/test_composite_op_externalize.py | 236 ++++++++++++++++++ tests/export/test_graph_mode_mlir_export.py | 94 +++++++ tests/models/composite.py | 164 ++++++++++++ .../quantization/test_graph_mode_quantizer.py | 130 +--------- .../test_graph_mode_quantizer_mnist.py | 132 ++++++++++ tests/test_utils/general.py | 74 ++++++ 9 files changed, 771 insertions(+), 137 deletions(-) create mode 100644 tests/export/test_composite_op_externalize.py create mode 100644 tests/models/composite.py diff --git a/pyproject.toml b/pyproject.toml index 8dd045c..987040e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] build-backend = "setuptools.build_meta" -requires = [ "setuptools>=42", "wheel" ] +requires = [ "setuptools>=42" ] [project] name = "coreai-opt" @@ -50,8 +50,8 @@ dependencies = [ name = "Apple Core AI Optimization Team" [project.optional-dependencies] coreai = [ - "coreai-core==1.0.0b1", - "coreai-torch==0.4.0", + "coreai-core==1.0.0b2", + "coreai-torch>=0.4.0", "scikit-learn>=1.7.2", ] [project.urls] @@ -135,8 +135,8 @@ pre-commit = [ ] # TODO: deduplicate coreai dependencies across groups stable-coreai = [ - "coreai-core==1.0.0b1", - "coreai-torch==0.4.0", + "coreai-core==1.0.0b2", + "coreai-torch>=0.4.0", "scikit-learn>=1.7.2", ] tamm-export = [] @@ -193,6 +193,12 @@ conflicts = [ ], ] [tool.uv.sources] +# TEMPORARY: resolve coreai-torch from the module externalization API branch +# instead of the PyPI release. That branch adds the `_patch_model_for_externalization` +# and `_subexport_and_restore` entry points used by the externalization tests. +# It lives on a fork; apple/coreai-torch does not carry it yet. Drop this entry +# (and re-pin the versions above) once the work lands upstream and is released. +coreai-torch = { git = "https://github.com/gokulkrishna98/coreai-torch.git", branch = "dev/gokul/module-externalization-api" } torch = [ { index = "pytorch-cpu", marker = "sys_platform != 'linux'" }, { index = "pytorch-cu128", marker = "sys_platform == 'linux'" }, diff --git a/tests/conftest.py b/tests/conftest.py index f0b1ed8..48ebf7a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -34,10 +34,19 @@ PerTensorGranularity, QuantizationScheme, QuantizationSpec, + default_activation_quantization_spec, + default_weight_quantization_spec, ) from coreai_opt.quantization.spec.fake_quantize import _DefaultFakeQuantizeImpl from coreai_opt.quantization.spec.qparams_calculator import StaticQParamsCalculator from coreai_opt.quantization.spec.range_calculator import MinMaxRangeCalculator +from tests.models.composite import ( # noqa: F401 + composite_rmsnorm_input, + composite_rmsnorm_model, + mnist_composite_rmsnorm_example_input, + mnist_composite_rmsnorm_pretrained_model, + mnist_composite_rmsnorm_pretrained_state, +) from tests.models.mnist import ( # noqa: F401 custom_test_mnist_model, mnist_data, @@ -124,6 +133,27 @@ def _spec(dtype: torch.dtype | str) -> QuantizationSpec: ) +def make_graph_mode_ptq_config(*, quantize_activations: bool) -> QuantizerConfig: + """Build a graph-mode w8 (weight-only) or w8a8 PTQ QuantizerConfig. + + Args: + quantize_activations (bool): True for w8a8, False for w8 weight-only. + + Returns: + QuantizerConfig: Config with the default weight spec globally, plus the + default activation spec on every op input/output when requested. + """ + activation_spec = default_activation_quantization_spec() if quantize_activations else None + return QuantizerConfig( + global_config=ModuleQuantizerConfig( + op_state_spec={"weight": default_weight_quantization_spec()}, + op_input_spec={"*": activation_spec} if activation_spec else None, + op_output_spec={"*": activation_spec} if activation_spec else None, + ), + execution_mode="graph", + ) + + @pytest.fixture(autouse=True) def seed_every_test(request: pytest.FixtureRequest) -> None: """Seeding policy for test reproducibility. diff --git a/tests/export/export_utils.py b/tests/export/export_utils.py index 4460835..a8c69f1 100644 --- a/tests/export/export_utils.py +++ b/tests/export/export_utils.py @@ -376,10 +376,14 @@ def convert( self, traced_model: torch.export.ExportedProgram, input_data: torch.Tensor, + externalize_model: Any = None, **kwargs: Any, ) -> AIProgram: _, _ = input_data, kwargs - coreai_program = self._lower_to_coreai(traced_model) + coreai_program = self._lower_to_coreai( + traced_model, + externalize_model=externalize_model, + ) assert type(coreai_program) is AIProgram return coreai_program @@ -457,10 +461,32 @@ def _verify_custom_ops_in_torch_program( @staticmethod def _lower_to_coreai( exported_program: torch.export.ExportedProgram, + externalize_model: Any = None, ) -> AIProgram: - """Lower exported program to Core AI.""" + """Lower exported program to Core AI. + + Args: + exported_program: The exported program to lower. + externalize_model: Optional ``torch.nn.Module`` that was marked in + place by ``coreai_torch._patch_model_for_externalization``. + When provided, + ``_subexport_and_restore(model, exported_program)`` is run to + sub-export each marked composite (and restore the patched + forwards); the resulting ``_ExternalizedExportedProgram`` list + is passed to ``TorchConverter.add_exported_program`` via + ``_externalized_exported_programs`` so the composites survive + lowering as opaque calls. + """ converter = coreai_torch.TorchConverter() - converter.add_exported_program(exported_program) + externalized_exported_programs = ( + coreai_torch._subexport_and_restore(externalize_model, exported_program) + if externalize_model is not None + else None + ) + converter.add_exported_program( + exported_program, + _externalized_exported_programs=externalized_exported_programs, + ) return converter.to_coreai() diff --git a/tests/export/test_composite_op_externalize.py b/tests/export/test_composite_op_externalize.py new file mode 100644 index 0000000..9a00770 --- /dev/null +++ b/tests/export/test_composite_op_externalize.py @@ -0,0 +1,236 @@ +# Copyright 2026 Apple Inc. +# +# Use of this source code is governed by a BSD-3-Clause license that can +# be found in the LICENSE file or at https://opensource.org/licenses/BSD-3-Clause + +"""Externalize-specific structural tests for _patch_model_for_externalization +in presence of coreai-opt graph mode quantization. + +Test structural assertions: after ``_patch_model_for_externalization`` +patches a composite submodule's forward into a ``torch.library.custom_op``, +the resulting opaque call_function node survives Graph-mode ``prepare`` + ``finalize``. +Coverage spans: + +- the RMSNorm composite under both w8 weight-only and w8a8: + ``test_composite_op_survives_prepare_and_finalize`` +- explicit quantization of the composite's own input/output boundary + via a module-level config, by name and by type, on a bare composite, on a + mixed model with other quantized ops, and on a multi-tensor (q / k / v) SDPA + composite; a distinct dtype on the composite config proves it outranks the + global spec at the boundary (``TestCompositeOpIOQuantization``). + +End-to-end lowering and execution tests live in +``tests/export/test_graph_mode_mlir_export.py::test_composite_externalize_export``. +""" + +from __future__ import annotations + +import pytest +import torch +import torch.nn as nn +from coreai_torch import ExternalizeSpec, _patch_model_for_externalization +from coreai_torch.composite_ops import SDPA, RMSNormImpl + +from coreai_opt import ExportBackend +from coreai_opt.quantization import ( + ModuleQuantizerConfig, + Quantizer, + QuantizerConfig, +) +from coreai_opt.quantization.spec import ( + PerTensorGranularity, + QuantizationScheme, + QuantizationSpec, + default_activation_quantization_spec, + default_weight_quantization_spec, +) +from tests.conftest import make_graph_mode_ptq_config +from tests.models.composite import ( + CompositeRMSNormModel, + CompositeRMSNormOnlyModel, + CompositeSDPAModel, +) +from tests.test_utils.general import ( + assert_single_call_function_node, + get_quantize_dtype, + is_coreai_dequantize, + is_coreai_quantize, +) + +_RMSNORM_SPEC = ExternalizeSpec( + target_class=RMSNormImpl, + composite_op_name="rms_norm", + composite_attrs=["axes", "eps"], +) +_SDPA_SPEC = ExternalizeSpec( + target_class=SDPA, + composite_op_name="scaled_dot_product_attention", + composite_attrs=["scale", "is_causal", "window_size"], +) + + +@pytest.mark.parametrize( + "quantize_activations", + [ + pytest.param(False, id="w8-weight-only"), + pytest.param(True, id="w8a8"), + ], +) +def test_composite_op_survives_prepare_and_finalize( + composite_rmsnorm_model, + composite_rmsnorm_input, + quantize_activations: bool, +) -> None: + """The externalized composite must remain a single opaque + call_function node end-to-end, under both w8 and w8a8. + + ``_patch_model_for_externalization`` swaps the submodule's forward for a + ``torch.library.custom_op`` BEFORE the quantizer runs, so graph mode's + annotator never sees the composite body and cannot insert q-dq + inside it. The structural guarantee here is that the custom-op + call survives ``Quantizer.prepare`` (which traces the model into + a GraphModule and inserts observers) and ``Quantizer.finalize`` + (which converts observers into coreai q-dq / constexpr nodes), + irrespective of whether activation observers are inserted on + surrounding ops. + """ + model = composite_rmsnorm_model + sample = composite_rmsnorm_input + + _patch_model_for_externalization(model, [_RMSNORM_SPEC]) + op_name = model.norm._externalize_op_name + target_substr = f"coreai_torch_ext.{op_name}" + + quantizer = Quantizer( + model, make_graph_mode_ptq_config(quantize_activations=quantize_activations) + ) + prepared = quantizer.prepare((sample,)) + assert_single_call_function_node(prepared, target_substr, stage="prepared") + + finalized = quantizer.finalize(backend=ExportBackend.CoreAI) + assert_single_call_function_node(finalized, target_substr, stage="finalized") + + +# Composite op I/O boundary quantization + +# (model class, externalize spec, submodule attribute name, tensor input count). +# All three models default to dim=32 and accept the same rank-3 fp16 sample. +_BOUNDARY_CASES = [ + pytest.param(CompositeRMSNormOnlyModel, _RMSNORM_SPEC, "norm", 1, id="rmsnorm-only"), + pytest.param(CompositeRMSNormModel, _RMSNORM_SPEC, "norm", 1, id="rmsnorm-mixed"), + pytest.param(CompositeSDPAModel, _SDPA_SPEC, "composite", 3, id="sdpa-qkv"), +] + + +class TestCompositeOpIOQuantization: + """Ensure externalized composite's I/O boundary can be quantized + via a module-level config, by name and by type. + + The composite is opaque to the op-pattern annotator, but the custom-op + node retains ``nn_module_stack`` metadata (path and type), so a module-level + config can target it for i/o quantization at the boundary. A global config + quantizes the rest of the model with the default activation dtype (int8) and + the composite config provides a distinct ``_COMPOSITE_ACT_DTYPE`` (uint8) on + the composite's edges. Module config outranks global, so the composite + boundary must carry the composite dtype while every other quantized edge + carries the global dtype. + """ + + _COMPOSITE_ACT_DTYPE = torch.uint8 + + @classmethod + def _config(cls, spec: ExternalizeSpec, module_name: str, target_by: str) -> QuantizerConfig: + # The composite config must use a dtype DISTINCT from the global + # (default) activation dtype: a matching dtype collapses via observer + # sharing into a vacuous no-op, so the composite's effect at the + # boundary would not be observable. + assert cls._COMPOSITE_ACT_DTYPE != default_activation_quantization_spec().dtype + composite_act = QuantizationSpec( + dtype=cls._COMPOSITE_ACT_DTYPE, + qscheme=QuantizationScheme.SYMMETRIC, + granularity=PerTensorGranularity(), + ) + global_config = ModuleQuantizerConfig( + op_state_spec={"weight": default_weight_quantization_spec()}, + op_input_spec={"*": default_activation_quantization_spec()}, + op_output_spec={"*": default_activation_quantization_spec()}, + ) + composite_config = ModuleQuantizerConfig( + module_input_spec={"*": composite_act}, + module_output_spec={"*": composite_act}, + ) + if target_by == "name": + scope = {"module_name_configs": {module_name: composite_config}} + else: + scope = {"module_type_configs": {spec.target_class: composite_config}} + return QuantizerConfig(global_config=global_config, execution_mode="graph", **scope) + + def _finalize( + self, + model: nn.Module, + sample: torch.Tensor, + spec: ExternalizeSpec, + module_name: str, + target_by: str, + ) -> tuple[torch.fx.GraphModule, str]: + _patch_model_for_externalization(model, [spec]) + op_name = model.get_submodule(module_name)._externalize_op_name + target_substr = f"coreai_torch_ext.{op_name}" + + quantizer = Quantizer(model, self._config(spec, module_name, target_by)) + prepared = quantizer.prepare((sample,)) + assert_single_call_function_node(prepared, target_substr, stage="prepared") + + finalized = quantizer.finalize(backend=ExportBackend.CoreAI) + assert_single_call_function_node(finalized, target_substr, stage="finalized") + return finalized, target_substr + + def _assert_boundary_quantized( + self, + finalized: torch.fx.GraphModule, + target_substr: str, + num_tensor_inputs: int, + ) -> None: + composite = assert_single_call_function_node(finalized, target_substr, stage="finalized") + + # A composite's non-tensor captured attributes appear either as baked-in + # constants (SDPA's scale / is_causal / window_size) or as a get_attr arg + # (RMSNorm's scale), and neither is a quantized activation edge, so + # filter get_attr out rather than indexing fixed arg positions. + tensor_inputs = [ + a for a in composite.args if isinstance(a, torch.fx.Node) and a.op != "get_attr" + ] + assert len(tensor_inputs) == num_tensor_inputs, ( + f"Expected {num_tensor_inputs} tensor inputs to {composite.name}, " + f"got {[n.name for n in tensor_inputs]}" + ) + for act_input in tensor_inputs: + assert is_coreai_dequantize(act_input.target) + assert get_quantize_dtype(act_input.args[0]) == self._COMPOSITE_ACT_DTYPE + + users = list(composite.users) + assert len(users) == 1 + assert is_coreai_quantize(users[0].target) + assert get_quantize_dtype(users[0]) == self._COMPOSITE_ACT_DTYPE + + composite_dtype_quant = [ + n + for n in finalized.graph.nodes + if is_coreai_quantize(n.target) and get_quantize_dtype(n) == self._COMPOSITE_ACT_DTYPE + ] + assert len(composite_dtype_quant) == num_tensor_inputs + 1 + + @pytest.mark.parametrize("target_by", ["name", "type"]) + @pytest.mark.parametrize("model_cls, spec, module_name, num_tensor_inputs", _BOUNDARY_CASES) + def test_composite_boundary_quantized( + self, + model_cls: type[nn.Module], + spec: ExternalizeSpec, + module_name: str, + num_tensor_inputs: int, + target_by: str, + ) -> None: + model = model_cls().eval().half() + sample = torch.randn(2, 4, 32, dtype=torch.float16) + finalized, target_substr = self._finalize(model, sample, spec, module_name, target_by) + self._assert_boundary_quantized(finalized, target_substr, num_tensor_inputs) diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index deeba1c..27b8fba 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -9,6 +9,8 @@ import pytest import torch +from coreai_torch import ExternalizeSpec, _patch_model_for_externalization +from coreai_torch.composite_ops import SDPA, RMSNormImpl from coreai_opt import ExportBackend from coreai_opt.palettization.kmeans import KMeansPalettizer @@ -29,7 +31,9 @@ ParametrizedFP8Configs, ParametrizedP4A8CompressionConfigs, ParametrizedQuantConfigs, + make_graph_mode_ptq_config, ) +from tests.models.composite import CompositeRMSNormModel, CompositeSDPAModel from . import export_utils @@ -419,3 +423,93 @@ def test_integer_quant_minval_export( "dequantize": 4 if has_activation_quant else 0, }, ) + + +# Composite-op externalize export coverage + + +@pytest.mark.parametrize( + "quantize_activations, expected_quantize_count", + [ + pytest.param(False, 0, id="w8-weight-only"), + pytest.param(True, 4, id="w8a8"), + ], +) +@pytest.mark.parametrize( + "model_cls, externalize_spec", + [ + pytest.param( + CompositeRMSNormModel, + ExternalizeSpec( + target_class=RMSNormImpl, + composite_op_name="rms_norm", + composite_attrs=["axes", "eps"], + ), + id="rmsnorm", + ), + pytest.param( + CompositeSDPAModel, + ExternalizeSpec( + target_class=SDPA, + composite_op_name="scaled_dot_product_attention", + composite_attrs=["scale", "is_causal", "window_size"], + ), + id="sdpa", + ), + ], +) +def test_composite_externalize_export( + model_cls: type[torch.nn.Module], + externalize_spec: ExternalizeSpec, + quantize_activations: bool, + expected_quantize_count: int, +) -> None: + """End-to-end CoreAI export of a model with an externalized composite op. + + Marks the composite op for externalization, runs graph-mode PTQ + (w8 weight-only or w8a8), then lowers the finalized graph to a + .aimodel and runs it. ``convert_and_verify`` handles SNR / PSNR + on the runtime output and op-count verification on the exported + program (``constexpr_blockwise_shift_scale`` for weight quantizers + and ``quantize`` / ``dequantize`` for activation quantizers). + + Both models wrap their composite in two Linears, so the op counts are + identical across the RMSNorm and SDPA cases: the composite itself is + opaque and contributes no quantizers of its own under a global config. + + ``externalize_model`` is forwarded through ``convert_and_verify``'s + ``**converter_kwargs`` so the MLIR converter runs + ``_subexport_and_restore(model, ep)`` and sees the opaque composite + during ``TorchConverter.add_exported_program``. + """ + model = model_cls().eval().half() + input_data = torch.randn(2, 4, 32, dtype=torch.float16) + + _patch_model_for_externalization(model, [externalize_spec]) + + quantizer = Quantizer( + model, make_graph_mode_ptq_config(quantize_activations=quantize_activations) + ) + prepared_model = quantizer.prepare((input_data,)) + + if quantize_activations: + with quantizer.calibration_mode(), torch.no_grad(): + prepared_model(input_data) + + with torch.no_grad(): + prepared_model_output = prepared_model(input_data) + + finalized_model = quantizer.finalize(backend=ExportBackend.CoreAI) + + export_utils.convert_and_verify( + finalized_model=finalized_model, + input_data=input_data, + expected_ops={ + "constexpr_blockwise_shift_scale": 2, + "quantize": expected_quantize_count, + "dequantize": expected_quantize_count, + }, + export_backend=ExportBackend.CoreAI, + prepared_model_output=prepared_model_output, + externalize_model=model, + ) diff --git a/tests/models/composite.py b/tests/models/composite.py new file mode 100644 index 0000000..5359cfe --- /dev/null +++ b/tests/models/composite.py @@ -0,0 +1,164 @@ +# Copyright 2026 Apple Inc. +# +# Use of this source code is governed by a BSD-3-Clause license that can +# be found in the LICENSE file or at https://opensource.org/licenses/BSD-3-Clause + +"""Test models with composite ops, for externalization test coverage.""" + +from __future__ import annotations + +import pytest +import torch +import torch.nn as nn +import torch.nn.functional as F + +_DIM = 32 +_HIDDEN = 64 +_SEQ = 4 +_BATCH = 2 + + +class CompositeRMSNormModel(nn.Module): + """Linear -> RMSNormImpl (composite) -> Linear over rank-3 activations.""" + + def __init__( + self, + dim: int = _DIM, + hidden: int = _HIDDEN, + eps: float = 1e-5, + ) -> None: + from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 + + super().__init__() + self.up = nn.Linear(dim, hidden, bias=False) + self.norm = RMSNormImpl(eps=eps) + self.scale = nn.Parameter(torch.ones(hidden)) + self.down = nn.Linear(hidden, dim, bias=False) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + h = self.up(x) + h = self.norm(h, self.scale) + return self.down(h) + + +@pytest.fixture +def composite_rmsnorm_model() -> CompositeRMSNormModel: + """Eval-half model with a single RMSNormImpl composite op.""" + return CompositeRMSNormModel().eval().half() + + +@pytest.fixture +def composite_rmsnorm_input() -> torch.Tensor: + """Rank-3 fp16 sample input matching CompositeRMSNormModel's shapes.""" + return torch.randn(_BATCH, _SEQ, _DIM, dtype=torch.float16) + + +class MNISTCompositeRMSNormModel(nn.Module): + """Tiny MNIST classifier with an embedded RMSNormImpl composite op. + + Architecture: Flatten -> Linear(28*28, 128) -> RMSNormImpl -> + ReLU -> Linear(128, 10) -> LogSoftmax. + """ + + def __init__( + self, + hidden: int = 128, + num_classes: int = 10, + eps: float = 1e-5, + ) -> None: + from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 + + super().__init__() + self.flatten = nn.Flatten() + self.fc1 = nn.Linear(28 * 28, hidden) + self.norm = RMSNormImpl(eps=eps) + self.scale = nn.Parameter(torch.ones(hidden)) + self.relu = nn.ReLU() + self.fc2 = nn.Linear(hidden, num_classes) + self.softmax = nn.LogSoftmax(dim=-1) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.flatten(x) + x = self.fc1(x) + x = self.norm(x, self.scale) + x = self.relu(x) + x = self.fc2(x) + return self.softmax(x) + + +@pytest.fixture(scope="function") +def mnist_composite_rmsnorm_pretrained_state(mnist_dataset) -> dict: + """One-epoch-pretrained state_dict for MNISTCompositeRMSNormModel. + + Training costs ~1.5s. This fixture is function scoped so the + repo-wide seeding policy applies: determinism comes from the + consuming test's ``@pytest.mark.seed`` marker, which the autouse + ``seed_every_test`` fixture in ``tests/conftest.py`` honors before + this fixture runs. + """ + model = MNISTCompositeRMSNormModel() + + train_ds, _ = mnist_dataset + train_loader = torch.utils.data.DataLoader(train_ds, batch_size=128, shuffle=False) + + optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) + model.train() + for _data, _target in train_loader: + optimizer.zero_grad() + output = model(_data) + loss = F.nll_loss(output, _target) + loss.backward() + optimizer.step() + return {k: v.detach().clone() for k, v in model.state_dict().items()} + + +@pytest.fixture(scope="function") +def mnist_composite_rmsnorm_pretrained_model( + mnist_composite_rmsnorm_pretrained_state: dict, +) -> MNISTCompositeRMSNormModel: + """Fresh MNISTCompositeRMSNormModel loaded from the pretrained state fixture.""" + model = MNISTCompositeRMSNormModel() + model.load_state_dict(mnist_composite_rmsnorm_pretrained_state) + return model + + +@pytest.fixture +def mnist_composite_rmsnorm_example_input() -> torch.Tensor: + """A canonical example-input tensor matching MNIST shape, for prepare().""" + return torch.ones(1, 1, 28, 28, dtype=torch.float32) + + +class CompositeRMSNormOnlyModel(nn.Module): + """A single RMSNormImpl composite and nothing else.""" + + def __init__(self, dim: int = _DIM, eps: float = 1e-5) -> None: + from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 + + super().__init__() + self.norm = RMSNormImpl(eps=eps) + self.scale = nn.Parameter(torch.ones(dim)) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.norm(x, self.scale) + + +class CompositeSDPAModel(nn.Module): + """proj -> SDPA(composite) -> output_proj, fp16, single-head fake-dim.""" + + def __init__(self, dim: int = _DIM) -> None: + from coreai_torch.composite_ops import SDPA # noqa: PLC0415 + + super().__init__() + self.qkv = nn.Linear(dim, dim * 3, bias=False) + self.composite = SDPA(scale=None, is_causal=True) + self.out = nn.Linear(dim, dim, bias=False) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + qkv = self.qkv(x) + q, k, v = qkv.chunk(3, dim=-1) + # Insert a single fake head dim so SDPA sees rank-4 inputs. + q = q.unsqueeze(1) + k = k.unsqueeze(1) + v = v.unsqueeze(1) + attn = self.composite(q, k, v).squeeze(1) + return self.out(attn) diff --git a/tests/quantization/test_graph_mode_quantizer.py b/tests/quantization/test_graph_mode_quantizer.py index cb41451..41a3ebe 100644 --- a/tests/quantization/test_graph_mode_quantizer.py +++ b/tests/quantization/test_graph_mode_quantizer.py @@ -49,6 +49,7 @@ StaticQParamsCalculator, ) from tests.models.simple import SimpleModel +from tests.test_utils.general import get_fake_quant_nodes @pytest.fixture @@ -87,16 +88,6 @@ def weight_only_config(): ) -def get_fake_quant_nodes(model: torch.fx.GraphModule) -> list[torch.fx.Node]: - """ - Returns list of fake quant nodes present in the input model - """ - fake_quant_nodes = [ - node for node in model.graph.nodes if "activation_post_process" in node.name - ] - return fake_quant_nodes - - class TestGraphModeQuantizer: """Test cases for GraphQuantizer class.""" @@ -1195,125 +1186,6 @@ def test_train_eval_compatible_with_context_managers( assert prepared_model.training -class TestCompositeOpQuantization: - """ - Tests that models with COREAI CompositeOps can be quantized - """ - - class SDPAModule(torch.nn.Module): - def forward(self, query, key, value): - from coreai_torch.composite_ops._sdpa import ( # noqa: PLC0415 - scaled_dot_product_attention as _scaled_dot_product_attention, - ) - - return _scaled_dot_product_attention(query, key, value, is_causal=True) - - class SimpleSDPAModel(torch.nn.Module): - def __init__(self): - super().__init__() - self.proj = torch.nn.Linear(16, 48) - self.sdpa = TestCompositeOpQuantization.SDPAModule() - - def forward(self, x): - qkv = self.proj(x) - q, k, v = qkv.chunk(3, dim=-1) - b, s, _ = q.shape - q = q.reshape(b, 1, s, 16) - k = k.reshape(b, 1, s, 16) - v = v.reshape(b, 1, s, 16) - return self.sdpa(q, k, v) - - @pytest.fixture - def model(self): - return self.SimpleSDPAModel() - - @pytest.fixture - def example_input(self): - return torch.randn(1, 4, 16) - - @pytest.mark.xfail(reason="tracked by coreai-torch issue #309") - def test_composite_op_io_quantization(self, model, example_input): - """ - Verify CompositeOps boundaries can be quantized - """ - qspec_dict = { - "dtype": "int8", - "qscheme": "symmetric", - "granularity": {"type": "per_tensor"}, - } - config = QuantizerConfig.from_dict( - { - "quantization_config": { - "global_config": {"op_state_spec": {"weight": qspec_dict}}, - "module_name_configs": { - "sdpa": { - "op_input_spec": None, - "op_output_spec": None, - "op_state_spec": None, - "module_input_spec": { - 0: qspec_dict, - 1: qspec_dict, - 2: qspec_dict, - }, - "module_output_spec": { - "*": qspec_dict, - }, - } - }, - } - } - ) - - quantizer = Quantizer(model, config) - prepared_model = quantizer.prepare((example_input,)) - assert isinstance(prepared_model, torch.fx.GraphModule) - - def _is_composite_op(node): - return ( - node.op == "call_function" - and isinstance(node.target, torch._ops.OpOverload) - and node.target.namespace == "CompositeOps" - ) - - # Find the SDPA node - sdpa_nodes = [ - n - for n in prepared_model.graph.nodes - if n.op == "call_function" - and isinstance(n.target, torch._ops.OpOverload) - and n.target._opname == "scaled_dot_product_attention" - ] - assert len(sdpa_nodes) == 1, f"Expected 1 SDPA node, got {len(sdpa_nodes)}" - sdpa_node = sdpa_nodes[0] - - composite_op_input_nodes = [arg for arg in sdpa_node.args if _is_composite_op(arg)] - composite_op_output_nodes = [user for user in sdpa_node.users if _is_composite_op(user)] - - assert len(composite_op_input_nodes) == 3, ( - f"Expected 3 custom input nodes (q/k/v), got {len(composite_op_input_nodes)}" - ) - assert len(composite_op_output_nodes) == 1, "Expected 1 composite op output node" - - for node in composite_op_input_nodes + composite_op_output_nodes: - assert "name" in node.kwargs, f"kwargs not restored for {node.name}" - assert "op_name" in node.kwargs, f"kwargs not restored for {node.name}" - assert node.kwargs["op_name"] == "scaled_dot_product_attention" - - for node in composite_op_input_nodes: - input_node = node.args[0] - assert "activation_post_process" in input_node.name, ( - f"Expected fake quant before {node.name} " - f"(input={node.kwargs['name']}), " - f"got {input_node.name} instead" - ) - - for node in composite_op_output_nodes: - users = list(node.users.keys()) - assert any("activation_post_process" in u.name for u in users), ( - f"Expected fake quant after {node.name}, got users: {[u.name for u in users]}" - ) - - class TestFP4MLIRExportValidation: """Test that FP4 export validation rejects unsupported configurations.""" diff --git a/tests/quantization/test_graph_mode_quantizer_mnist.py b/tests/quantization/test_graph_mode_quantizer_mnist.py index 107392f..b8b740f 100644 --- a/tests/quantization/test_graph_mode_quantizer_mnist.py +++ b/tests/quantization/test_graph_mode_quantizer_mnist.py @@ -5,6 +5,8 @@ import pytest import torch +from coreai_torch import ExternalizeSpec, _patch_model_for_externalization +from coreai_torch.composite_ops import RMSNormImpl import tests.utils as utils from coreai_opt import ExportBackend @@ -18,6 +20,8 @@ PerChannelGranularity, PerTensorGranularity, ) +from tests.export import export_utils +from tests.test_utils.general import assert_single_call_function_node image_size = 28 batch_size = 128 @@ -324,3 +328,131 @@ def test_weight_and_activation_qat_mnist(mnist_pretrained_model, mnist_dataset, # Accuracy before and after finalize should match assert post_qat_accuracy == finalized_accuracy + + +@pytest.mark.seed +def test_weight_and_activation_qat_mnist_with_externalized_composite( + mnist_composite_rmsnorm_pretrained_model, + mnist_composite_rmsnorm_example_input, + mnist_dataset, +): + """QAT on an MNIST classifier with an externalized RMSNormImpl composite. + + Graph-mode QAT flow: baseline accuracy -> mark + for externalization -> prepare -> post-prepare drop -> train under + ``training_mode()`` -> post-QAT recovery -> finalize -> finalized + accuracy matches post-QAT accuracy. + + Externalize-specific overlay: + - ``_patch_model_for_externalization`` is applied BEFORE + ``Quantizer.prepare`` so graph mode treats the composite as opaque + and cannot insert q-dq inside the RMSNorm body. + - The composite itself carries no quantization annotation: the + global config only annotates registered op patterns, so the + composite's own input and output edges are not targeted here. + - After finalize, the graph must contain exactly one + ``coreai_torch_ext::norm`` call_function node. + - The finalized model lowers to a runnable .aimodel and the + runtime output matches the finalized torch output under the + SNR / PSNR thresholds enforced by ``convert_and_verify``. + ``externalize_model`` is forwarded so the composite stays + opaque through ``TorchConverter.add_exported_program``. + """ + train_loader, test_loader = utils.setup_data_loaders(mnist_dataset, batch_size) + + model = mnist_composite_rmsnorm_pretrained_model + accuracy = utils.eval_model(model, test_loader) + assert accuracy > 92.0, ( + f"expect pretrained MNIST-composite model accuracy > 92%, got {accuracy:.2f}%" + ) + + _patch_model_for_externalization( + model, + [ + ExternalizeSpec( + target_class=RMSNormImpl, + composite_op_name="rms_norm", + composite_attrs=["axes", "eps"], + ), + ], + ) + op_name = model.norm._externalize_op_name + target_substr = f"coreai_torch_ext.{op_name}" + + # w8a8 via the default global config, which is equivalent to a bare + # `QuantizerConfig()`. Both activation and weight dtype default to int8: + # activations symmetric per-tensor, weights symmetric per-channel on + # axis 0. + # The global config does not reach the externalized composite's + # boundary because it only annotates registered op patterns. The + # composite's input edge is dequantized only incidentally by fc1's + # output observer, and its output edge is not quantized at all. + # Quantizing a composite boundary requires a module-level config and is + # covered in tests/export/test_composite_op_externalize.py:: + # TestCompositeOpIOQuantization. + config = QuantizerConfig(global_config=ModuleQuantizerConfig()) + quantizer = Quantizer(model, config) + + prepared_model = quantizer.prepare( + example_inputs=(mnist_composite_rmsnorm_example_input,), + ) + + post_prepare_accuracy = utils.eval_model(prepared_model, test_loader) + assert post_prepare_accuracy < 90.0, ( + f"Expect accuracy to drop below 90% after preparation with an all ones data sample; " + f"got {post_prepare_accuracy:.2f}% (baseline {accuracy:.2f}%)" + ) + + optimizer = torch.optim.Adam(prepared_model.parameters(), eps=1e-3, weight_decay=1e-4) + with quantizer.training_mode(): + for batch_idx, (data, target) in enumerate(train_loader): + utils.train_step( + prepared_model, + optimizer, + train_loader, + data, + target, + batch_idx, + epoch=0, + ) + + post_qat_accuracy = utils.eval_model(prepared_model, test_loader) + assert post_qat_accuracy > 94.0, ( + f"Expect accuracy to climb above 94% after QAT, got {post_qat_accuracy:.2f}%" + ) + + finalized_model = quantizer.finalize(backend=ExportBackend.CoreAI) + finalized_accuracy = utils.eval_model(finalized_model, test_loader) + assert post_qat_accuracy == finalized_accuracy, ( + f"post-QAT accuracy ({post_qat_accuracy:.2f}%) must match " + f"post-finalize accuracy ({finalized_accuracy:.2f}%)" + ) + + assert_single_call_function_node(finalized_model, target_substr, stage="finalized") + + # Lower to .aimodel and verify the runtime output matches the + # finalized torch output. expected_ops pins the weight constexpr and + # activation q-dq node counts graph mode inserts for the + # flatten -> Linear -> composite -> ReLU -> Linear -> LogSoftmax graph + # under the default w8a8 (int8) global config: + # - 2 constexpr_blockwise_shift_scale: the two Linear weights. + # - 5 quantize / 5 dequantize: the five annotated activation edges, + # namely the model input, fc1's input and output, and fc2's input + # and output. + # ReLU, LogSoftmax and the composite carry no quantization annotation + # and contribute no q-dq nodes. + sample_input = mnist_composite_rmsnorm_example_input + with torch.no_grad(): + prepared_for_export_output = prepared_model(sample_input) + export_utils.convert_and_verify( + finalized_model=finalized_model, + input_data=sample_input, + expected_ops={ + "constexpr_blockwise_shift_scale": 2, + "quantize": 5, + "dequantize": 5, + }, + export_backend=ExportBackend.CoreAI, + prepared_model_output=prepared_for_export_output, + externalize_model=model, + ) diff --git a/tests/test_utils/general.py b/tests/test_utils/general.py index 436a256..f8ef29b 100644 --- a/tests/test_utils/general.py +++ b/tests/test_utils/general.py @@ -8,6 +8,7 @@ import importlib.util import torch +from torch.ops import coreai COREAI_AVAILABLE = importlib.util.find_spec("coreai") is not None @@ -88,3 +89,76 @@ def verify_snr_psnr( if snr <= snr_thresh or psnr <= psnr_thresh: raise SNRBelowThresholdError(snr, psnr, snr_thresh, psnr_thresh, prefix) + + +def get_fake_quant_nodes(model: torch.fx.GraphModule) -> list[torch.fx.Node]: + """Return the activation_post_process observer nodes in a prepared graph.""" + return [node for node in model.graph.nodes if "activation_post_process" in node.name] + + +def assert_single_call_function_node( + gm: torch.fx.GraphModule, target_substr: str, *, stage: str = "" +) -> torch.fx.Node: + """Assert exactly one call_function node's target contains a substring. + + Current usage: externalized composite ops get a process-unique op name (sanitized module + path plus a uuid4 suffix), so there is no stable target object to compare + against and a substring match on ``str(node.target)`` is required. + + Args: + gm: The graph module to search + target_substr: Substring to match against ``str(node.target)`` + stage: Optional pipeline stage name, used only in the error message + + Returns: + The single matching node + + """ + matches = [ + n for n in gm.graph.nodes if n.op == "call_function" and target_substr in str(n.target) + ] + where = f" in the {stage.upper()} graph" if stage else "" + assert len(matches) == 1, ( + f"Expected exactly one call_function matching '{target_substr}'" + f"{where}; got {[n.name for n in matches]}" + ) + return matches[0] + + +def is_coreai_quantize(target: object) -> bool: + """Whether an FX node target is the ``coreai::quantize`` op. + + Compares by object identity against ``torch.ops.coreai``. Both forms are + matched because they are distinct objects and which one appears depends + on the pipeline stage: ``Quantizer.finalize`` emits the + ``OpOverloadPacket`` (``coreai.quantize``) while a decomposed + ExportedProgram carries the ``OpOverload`` (``coreai.quantize.default``). + + The op resolves lazily on first call, so this raises AttributeError if + the coreai op namespace was never registered (see ``COREAI_AVAILABLE``). + """ + return target is coreai.quantize or target is coreai.quantize.default + + +def is_coreai_dequantize(target: object) -> bool: + """Whether an FX node target is the ``coreai::dequantize`` op.""" + return target is coreai.dequantize or target is coreai.dequantize.default + + +def get_quantize_dtype(node: torch.fx.Node) -> torch.dtype | None: + """Return the quantized dtype carried in an FX node's args, else None. + + ``coreai::quantize`` takes ``(input, scale, dtype)``, so its dtype is the + third positional arg. ``coreai::dequantize`` takes ``(input, scale)`` and + carries no dtype, so this returns None for a dequantize node. To read the + dtype at a dequantize boundary, pass the quantize node feeding it + (``dequantize_node.args[0]``). + + Args: + node: The FX node to inspect + + Returns: + The first ``torch.dtype`` positional arg, or None if there is none + + """ + return next((a for a in node.args if isinstance(a, torch.dtype)), None) From 82eaa4ff8df0d3d93fdfce6a5e3de6f0b6f161e0 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:00:02 -0700 Subject: [PATCH 06/15] remove notebook diff and refactor quant cfg util Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- docs/src/tutorials/mnist_quantization.ipynb | 500 +++--------------- tests/conftest.py | 26 - tests/export/test_composite_op_externalize.py | 2 +- tests/export/test_graph_mode_mlir_export.py | 6 +- tests/fixtures/quantization.py | 23 + 5 files changed, 104 insertions(+), 453 deletions(-) diff --git a/docs/src/tutorials/mnist_quantization.ipynb b/docs/src/tutorials/mnist_quantization.ipynb index 13792d4..a9ee32f 100644 --- a/docs/src/tutorials/mnist_quantization.ipynb +++ b/docs/src/tutorials/mnist_quantization.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 23, "id": "954e0f62", "metadata": { "execution": { @@ -77,21 +77,6 @@ "from torchvision import datasets, transforms" ] }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c56dc8ec", - "metadata": {}, - "outputs": [], - "source": [ - "from coreai_torch import (\n", - " TorchConverter,\n", - " ExternalizeSpec,\n", - " mark_for_externalization,\n", - " get_decomp_table,\n", - ")\n" - ] - }, { "cell_type": "code", "execution_count": null, @@ -108,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 24, "id": "a55c2a50", "metadata": { "execution": { @@ -122,10 +107,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 3, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -140,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 25, "id": "978adffb", "metadata": { "execution": { @@ -171,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 26, "id": "e0b7cfe7", "metadata": { "execution": { @@ -209,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 27, "id": "8671c764", "metadata": { "execution": { @@ -221,18 +206,6 @@ }, "outputs": [], "source": [ - "from coreai_torch.composite_ops import RMSNormImpl\n", - "class RMSNorm(nn.Module):\n", - " def __init__(self, dim: int, eps: float = 1e-5):\n", - " super().__init__()\n", - " self.weight = nn.Parameter(torch.ones(dim))\n", - " # self.eps = eps\n", - " self.norm = RMSNormImpl(eps=eps)\n", - "\n", - " def forward(self, x: torch.Tensor) -> torch.Tensor:\n", - " return self.norm(x, self.weight)\n", - "\n", - "\n", "class MnistNetwork(nn.Module):\n", " def __init__(self, num_classes: int = 10, state_dict: dict | None = None) -> None:\n", " super().__init__()\n", @@ -241,7 +214,6 @@ " nn.ReLU(),\n", " nn.MaxPool2d(2, stride=2, padding=0),\n", " nn.Flatten(),\n", - " RMSNorm(2352),\n", " nn.Linear(2352, num_classes),\n", " )\n", " if state_dict is not None:\n", @@ -263,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 28, "id": "f48fdf9b", "metadata": { "execution": { @@ -318,7 +290,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 29, "id": "878f7025", "metadata": { "execution": { @@ -340,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 30, "id": "35dbf869", "metadata": { "execution": { @@ -369,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 31, "id": "3bbae265", "metadata": { "execution": { @@ -381,30 +353,41 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "MnistNetwork(\n", - " (model): Sequential(\n", - " (0): Conv2d(1, 12, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (1): ReLU()\n", - " (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", - " (3): Flatten(start_dim=1, end_dim=-1)\n", - " (4): RMSNorm(\n", - " (norm): RMSNormImpl()\n", - " )\n", - " (5): Linear(in_features=2352, out_features=10, bias=True)\n", - " )\n", - ")\n" - ] + "data": { + "text/plain": [ + "==========================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "==========================================================================================\n", + "MnistNetwork [1, 10] --\n", + "├─Sequential: 1-1 [1, 10] --\n", + "│ └─Conv2d: 2-1 [1, 12, 28, 28] 120\n", + "│ └─ReLU: 2-2 [1, 12, 28, 28] --\n", + "│ └─MaxPool2d: 2-3 [1, 12, 14, 14] --\n", + "│ └─Flatten: 2-4 [1, 2352] --\n", + "│ └─Linear: 2-5 [1, 10] 23,530\n", + "==========================================================================================\n", + "Total params: 23,650\n", + "Trainable params: 23,650\n", + "Non-trainable params: 0\n", + "Total mult-adds (Units.MEGABYTES): 0.12\n", + "==========================================================================================\n", + "Input size (MB): 0.00\n", + "Forward/backward pass size (MB): 0.08\n", + "Params size (MB): 0.09\n", + "Estimated Total Size (MB): 0.17\n", + "==========================================================================================" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "basic_cnn_model = MnistNetwork(num_classes=10)\n", "\n", - "print(basic_cnn_model)\n", "# Print summary of model\n", - "# summary(basic_cnn_model, input_size=(1, 1, 28, 28))" + "summary(basic_cnn_model, input_size=(1, 1, 28, 28))" ] }, { @@ -425,7 +408,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 32, "id": "91c17bb8", "metadata": { "execution": { @@ -440,12 +423,21 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.2546\n" + " Epoch 1: loss=0.3126\n", + " Epoch 2: loss=0.1170\n", + " Epoch 3: loss=0.0821\n", + " Epoch 4: loss=0.0669\n", + " Epoch 5: loss=0.0590\n", + " Epoch 6: loss=0.0522\n", + " Epoch 7: loss=0.0481\n", + " Epoch 8: loss=0.0452\n", + " Epoch 9: loss=0.0415\n", + " Epoch 10: loss=0.0379\n" ] } ], "source": [ - "EPOCHS = 1\n", + "EPOCHS = 10\n", "\n", "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizer = create_adam_optimizer(basic_cnn_model)\n", @@ -468,7 +460,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 33, "id": "fcb3fd97", "metadata": { "execution": { @@ -483,7 +475,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Baseline accuracy: 0.9688\n" + "Baseline accuracy: 0.9799\n" ] } ], @@ -510,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 34, "id": "7434e08f", "metadata": { "execution": { @@ -520,17 +512,7 @@ "shell.execute_reply": "2026-06-02T20:31:32.431486Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "W0630 17:26:54.494000 52887 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.\n", - "scikit-learn version 1.9.0 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.\n", - "Torch version 2.11.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.7.0 is the most recent version that has been tested.\n" - ] - } - ], + "outputs": [], "source": [ "from coreai_opt.quantization import (\n", " ModuleQuantizerConfig,\n", @@ -552,7 +534,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 35, "id": "0218c7aa", "metadata": { "execution": { @@ -583,50 +565,7 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "a3ac9f18", - "metadata": {}, - "outputs": [], - "source": [ - "def show_externalize_state(model, label):\n", - " print(f\"\\n========== {label} ==========\")\n", - "\n", - " # 1. Per-submodule marker attributes + forward swap\n", - " found = False\n", - " for name, mod in model.named_modules():\n", - " attrs = {\n", - " a: getattr(mod, a)\n", - " for a in (\"_externalize_name\", \"_externalize_op_name\",\n", - " \"_externalize_config\", \"_original_forward\")\n", - " if hasattr(mod, a)\n", - " }\n", - " if not attrs:\n", - " continue\n", - " found = True\n", - " print(f\"\\n submodule [{name}] type={type(mod).__name__}\")\n", - " for k, v in attrs.items():\n", - " print(f\" {k} = {v!r}\")\n", - " # forward identity is the clearest signal of the patch\n", - " print(f\" forward = {mod.forward!r}\")\n", - " print(f\" forward.__name__= {getattr(mod.forward, '__name__', '')}\")\n", - " print(f\" forward.__module__={getattr(mod.forward, '__module__', '')}\")\n", - "\n", - " if not found:\n", - " print(\" (no submodules carry externalize markers)\")\n", - "\n", - " # 2. Global torch.library registry under our namespace\n", - " ext_ns = getattr(torch.ops, \"coreai_torch_ext\", None)\n", - " print(f\"Ext_ns: {ext_ns}\")\n", - " if ext_ns is None:\n", - " print(\"\\n torch.ops.coreai_torch_ext: \")\n", - " else:\n", - " registered = [n for n in dir(ext_ns) if not n.startswith(\"_\")]\n", - " print(f\"\\n torch.ops.coreai_torch_ext ops: {registered}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, + "execution_count": 36, "id": "d1fd4ba2", "metadata": { "execution": { @@ -637,40 +576,6 @@ } }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "========== BEFORE ==========\n", - " (no submodules carry externalize markers)\n", - "Ext_ns: \n", - "\n", - " torch.ops.coreai_torch_ext ops: ['name']\n", - "\n", - "========== AFTER ==========\n", - "\n", - " submodule [model.4.norm] type=RMSNormImpl\n", - " _externalize_name = 'model.4.norm'\n", - " _externalize_op_name = 'model_4_norm'\n", - " _externalize_config = ExternalizeSpec(target_class=, composite_op_name='rms_norm', composite_attrs=['axes', 'eps'])\n", - " _original_forward = \n", - " forward = .patched_forward at 0x126bd9800>\n", - " forward.__name__= patched_forward\n", - " forward.__module__=coreai_torch.externalize\n", - "Ext_ns: \n", - "\n", - " torch.ops.coreai_torch_ext ops: ['model_4_norm', 'name']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", - " return cls.__new__(cls, *args)\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -693,21 +598,6 @@ " )\n", ")\n", "\n", - "show_externalize_state(wo_model, \"BEFORE \")\n", - "markers = mark_for_externalization(\n", - " wo_model,\n", - " [\n", - " ExternalizeSpec(\n", - " target_class=RMSNormImpl,\n", - " composite_op_name=\"rms_norm\",\n", - " composite_attrs=[\"axes\", \"eps\"],\n", - " ),\n", - " ],\n", - ")\n", - "\n", - "show_externalize_state(wo_model, \"AFTER \")\n", - "\n", - "\n", "wo_quantizer = Quantizer(wo_model, wo_config)\n", "wo_prepared = wo_quantizer.prepare(example_inputs)\n", "print(f\"Prepared weight-only quantization with dtype={WEIGHT_DTYPE}\")" @@ -731,7 +621,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 37, "id": "db4e1e88", "metadata": { "execution": { @@ -746,7 +636,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight-only PTQ accuracy: 0.9687\n" + "Weight-only PTQ accuracy: 0.9800\n" ] } ], @@ -783,7 +673,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 38, "id": "ad3be560", "metadata": { "execution": { @@ -811,7 +701,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 39, "id": "14a00586", "metadata": { "execution": { @@ -822,14 +712,6 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", - " return cls.__new__(cls, *args)\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -852,16 +734,6 @@ " )\n", ")\n", "\n", - "markers = mark_for_externalization(\n", - " wa_model,\n", - " [\n", - " ExternalizeSpec(\n", - " target_class=RMSNormImpl,\n", - " composite_op_name=\"rms_norm\",\n", - " composite_attrs=[\"axes\", \"eps\"],\n", - " ),\n", - " ],\n", - ")\n", "wa_quantizer = Quantizer(wa_model, wa_config)\n", "wa_prepared = wa_quantizer.prepare(example_inputs)\n", "print(\n", @@ -881,7 +753,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 40, "id": "cab3a185", "metadata": { "execution": { @@ -916,7 +788,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 41, "id": "a47189f5", "metadata": { "execution": { @@ -931,7 +803,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Weight + Activation accuracy after prepare + calibration: 0.9646\n" + "Weight + Activation accuracy after prepare + calibration: 0.9798\n" ] } ], @@ -969,7 +841,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 42, "id": "1209c6c2", "metadata": { "execution": { @@ -984,23 +856,18 @@ "name": "stdout", "output_type": "stream", "text": [ - " Epoch 1: loss=0.0908, accuracy=0.9755\n", - " Epoch 2: loss=0.0804, accuracy=0.9769\n", - " Epoch 3: loss=0.0739, accuracy=0.9784\n", - " Epoch 4: loss=0.0684, accuracy=0.9793\n", - " Epoch 5: loss=0.0638, accuracy=0.9802\n", - " Epoch 6: loss=0.0602, accuracy=0.9807\n", - " Epoch 7: loss=0.0571, accuracy=0.9818\n", - " Epoch 8: loss=0.0538, accuracy=0.9815\n", - " Epoch 9: loss=0.0516, accuracy=0.9812\n", - " Epoch 10: loss=0.0493, accuracy=0.9824\n", + " Epoch 1: loss=0.0276, accuracy=0.9832\n", + " Epoch 2: loss=0.0261, accuracy=0.9828\n", + " Epoch 3: loss=0.0253, accuracy=0.9835\n", + " Epoch 4: loss=0.0249, accuracy=0.9837\n", + " Epoch 5: loss=0.0242, accuracy=0.9830\n", "\n", - "QAT final accuracy: 0.9824\n" + "QAT final accuracy: 0.9830\n" ] } ], "source": [ - "QAT_EPOCHS = 10\n", + "QAT_EPOCHS = 5\n", "qat_optimizer = create_adam_optimizer(wa_prepared, lr=1e-4)\n", "\n", "wa_prepared.to(DEVICE)\n", @@ -1043,7 +910,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 43, "id": "76f11a15", "metadata": { "execution": { @@ -1074,7 +941,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 44, "id": "f2b809f3", "metadata": { "execution": { @@ -1085,117 +952,6 @@ } }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ExportedProgram:\n", - " class GraphModule(torch.nn.Module):\n", - " def forward(self, p_model_0_weight: \"f16[12, 1, 3, 3]\", p_model_0_bias: \"f16[12]\", p_model_4_weight: \"f16[2352]\", p_model_5_weight: \"f16[10, 2352]\", p_model_5_bias: \"f16[10]\", b_model_0_weight_scale: \"f16[1, 1, 1, 1]\", b_model_0_weight_zero_point: \"i8[1, 1, 1, 1]\", b_model_0_weight_quantized: \"i8[12, 1, 3, 3]\", b_model_5_weight_scale: \"f16[1, 1]\", b_model_5_weight_zero_point: \"i8[1, 1]\", b_model_5_weight_quantized: \"i8[10, 2352]\", b_activation_post_process_0_scale: \"f16[]\", b_activation_post_process_0_zero_point: \"i8[]\", b_activation_post_process_2_scale: \"f16[]\", b_activation_post_process_2_zero_point: \"i8[]\", b_activation_post_process_3_scale: \"f16[]\", b_activation_post_process_3_zero_point: \"i8[]\", b_activation_post_process_4_scale: \"f16[]\", b_activation_post_process_4_zero_point: \"i8[]\", b_activation_post_process_5_scale: \"f16[]\", b_activation_post_process_5_zero_point: \"i8[]\", b_activation_post_process_7_scale: \"f16[]\", b_activation_post_process_7_zero_point: \"i8[]\", x: \"f16[1, 1, 28, 28]\"):\n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " constexpr_blockwise_shift_scale: \"f16[12, 1, 3, 3]\" = torch.ops.coreai.constexpr_blockwise_shift_scale.default(b_model_0_weight_quantized, b_model_0_weight_scale, b_model_0_weight_zero_point, None, torch.int8); b_model_0_weight_quantized = b_model_0_weight_scale = b_model_0_weight_zero_point = None\n", - " constexpr_blockwise_shift_scale_1: \"f16[10, 2352]\" = torch.ops.coreai.constexpr_blockwise_shift_scale.default(b_model_5_weight_quantized, b_model_5_weight_scale, b_model_5_weight_zero_point, None, torch.int8); b_model_5_weight_quantized = b_model_5_weight_scale = b_model_5_weight_zero_point = None\n", - " quantize: \"i8[1, 1, 28, 28]\" = torch.ops.coreai.quantize.default(x, b_activation_post_process_0_scale, torch.int8, b_activation_post_process_0_zero_point); x = None\n", - " dequantize: \"f16[1, 1, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize, b_activation_post_process_0_scale, b_activation_post_process_0_zero_point, None, 0, torch.int8); quantize = b_activation_post_process_0_scale = b_activation_post_process_0_zero_point = None\n", - " \n", - " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/conv.py:553 in forward, code: return self._conv_forward(input, self.weight, self.bias)\n", - " convolution: \"f16[1, 12, 28, 28]\" = torch.ops.aten.convolution.default(dequantize, constexpr_blockwise_shift_scale, p_model_0_bias, [1, 1], [1, 1], [1, 1], False, [0, 0], 1); dequantize = constexpr_blockwise_shift_scale = p_model_0_bias = None\n", - " \n", - " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/activation.py:143 in forward, code: return F.relu(input, inplace=self.inplace)\n", - " relu: \"f16[1, 12, 28, 28]\" = torch.ops.aten.relu.default(convolution); convolution = None\n", - " \n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " quantize_1: \"i8[1, 12, 28, 28]\" = torch.ops.coreai.quantize.default(relu, b_activation_post_process_2_scale, torch.int8, b_activation_post_process_2_zero_point); relu = None\n", - " dequantize_1: \"f16[1, 12, 28, 28]\" = torch.ops.coreai.dequantize.default(quantize_1, b_activation_post_process_2_scale, b_activation_post_process_2_zero_point, None, 0, torch.int8); quantize_1 = b_activation_post_process_2_scale = b_activation_post_process_2_zero_point = None\n", - " \n", - " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/pooling.py:224 in forward, code: return F.max_pool2d(\n", - " max_pool2d_with_indices = torch.ops.aten.max_pool2d_with_indices.default(dequantize_1, [2, 2], [2, 2]); dequantize_1 = None\n", - " getitem: \"f16[1, 12, 14, 14]\" = max_pool2d_with_indices[0]; max_pool2d_with_indices = None\n", - " \n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " quantize_2: \"i8[1, 12, 14, 14]\" = torch.ops.coreai.quantize.default(getitem, b_activation_post_process_3_scale, torch.int8, b_activation_post_process_3_zero_point); getitem = None\n", - " dequantize_2: \"f16[1, 12, 14, 14]\" = torch.ops.coreai.dequantize.default(quantize_2, b_activation_post_process_3_scale, b_activation_post_process_3_zero_point, None, 0, torch.int8); quantize_2 = b_activation_post_process_3_scale = b_activation_post_process_3_zero_point = None\n", - " \n", - " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/flatten.py:55 in forward, code: return input.flatten(self.start_dim, self.end_dim)\n", - " view: \"f16[1, 2352]\" = torch.ops.aten.view.default(dequantize_2, [1, 2352]); dequantize_2 = None\n", - " \n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " quantize_3: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(view, b_activation_post_process_4_scale, torch.int8, b_activation_post_process_4_zero_point); view = None\n", - " dequantize_3: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_3, b_activation_post_process_4_scale, b_activation_post_process_4_zero_point, None, 0, torch.int8); quantize_3 = b_activation_post_process_4_scale = b_activation_post_process_4_zero_point = None\n", - " \n", - " # File: /var/folders/q7/_0kpp_m90hl6qlv1q398vjw40000gn/T/ipykernel_52887/2177393179.py:10 in forward, code: return self.norm(x, self.weight)\n", - " model_4_norm: \"f16[1, 2352]\" = torch.ops.coreai_torch_ext.model_4_norm.default(dequantize_3, p_model_4_weight); dequantize_3 = p_model_4_weight = None\n", - " \n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " quantize_4: \"i8[1, 2352]\" = torch.ops.coreai.quantize.default(model_4_norm, b_activation_post_process_5_scale, torch.int8, b_activation_post_process_5_zero_point); model_4_norm = None\n", - " dequantize_4: \"f16[1, 2352]\" = torch.ops.coreai.dequantize.default(quantize_4, b_activation_post_process_5_scale, b_activation_post_process_5_zero_point, None, 0, torch.int8); quantize_4 = b_activation_post_process_5_scale = b_activation_post_process_5_zero_point = None\n", - " \n", - " # File: /Volumes/Data/src/oss/extern/.venv-tutorial/lib/python3.11/site-packages/torch/nn/modules/linear.py:134 in forward, code: return F.linear(input, self.weight, self.bias)\n", - " permute: \"f16[2352, 10]\" = torch.ops.aten.permute.default(constexpr_blockwise_shift_scale_1, [1, 0]); constexpr_blockwise_shift_scale_1 = None\n", - " addmm: \"f16[1, 10]\" = torch.ops.aten.addmm.default(p_model_5_bias, dequantize_4, permute); p_model_5_bias = dequantize_4 = permute = None\n", - " \n", - " # Annotation: {'_torchdynamo_disable': True, '_torchdynamo_disable_recursive': True, '_torchdynamo_disable_method': 'dispatch_trace'} No stacktrace found for following nodes\n", - " quantize_5: \"i8[1, 10]\" = torch.ops.coreai.quantize.default(addmm, b_activation_post_process_7_scale, torch.int8, b_activation_post_process_7_zero_point); addmm = None\n", - " dequantize_5: \"f16[1, 10]\" = torch.ops.coreai.dequantize.default(quantize_5, b_activation_post_process_7_scale, b_activation_post_process_7_zero_point, None, 0, torch.int8); quantize_5 = b_activation_post_process_7_scale = b_activation_post_process_7_zero_point = None\n", - " return (dequantize_5,)\n", - " \n", - "Graph signature: \n", - " # inputs\n", - " p_model_0_weight: PARAMETER target='model.0.weight'\n", - " p_model_0_bias: PARAMETER target='model.0.bias'\n", - " p_model_4_weight: PARAMETER target='model.4.weight'\n", - " p_model_5_weight: PARAMETER target='model.5.weight'\n", - " p_model_5_bias: PARAMETER target='model.5.bias'\n", - " b_model_0_weight_scale: BUFFER target='model_0_weight_scale' persistent=True\n", - " b_model_0_weight_zero_point: BUFFER target='model_0_weight_zero_point' persistent=True\n", - " b_model_0_weight_quantized: BUFFER target='model_0_weight_quantized' persistent=True\n", - " b_model_5_weight_scale: BUFFER target='model_5_weight_scale' persistent=True\n", - " b_model_5_weight_zero_point: BUFFER target='model_5_weight_zero_point' persistent=True\n", - " b_model_5_weight_quantized: BUFFER target='model_5_weight_quantized' persistent=True\n", - " b_activation_post_process_0_scale: BUFFER target='activation_post_process_0_scale' persistent=True\n", - " b_activation_post_process_0_zero_point: BUFFER target='activation_post_process_0_zero_point' persistent=True\n", - " b_activation_post_process_2_scale: BUFFER target='activation_post_process_2_scale' persistent=True\n", - " b_activation_post_process_2_zero_point: BUFFER target='activation_post_process_2_zero_point' persistent=True\n", - " b_activation_post_process_3_scale: BUFFER target='activation_post_process_3_scale' persistent=True\n", - " b_activation_post_process_3_zero_point: BUFFER target='activation_post_process_3_zero_point' persistent=True\n", - " b_activation_post_process_4_scale: BUFFER target='activation_post_process_4_scale' persistent=True\n", - " b_activation_post_process_4_zero_point: BUFFER target='activation_post_process_4_zero_point' persistent=True\n", - " b_activation_post_process_5_scale: BUFFER target='activation_post_process_5_scale' persistent=True\n", - " b_activation_post_process_5_zero_point: BUFFER target='activation_post_process_5_zero_point' persistent=True\n", - " b_activation_post_process_7_scale: BUFFER target='activation_post_process_7_scale' persistent=True\n", - " b_activation_post_process_7_zero_point: BUFFER target='activation_post_process_7_zero_point' persistent=True\n", - " x: USER_INPUT\n", - " \n", - " # outputs\n", - " dequantize_5: USER_OUTPUT\n", - " \n", - "Range constraints: {}\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", - " return cls.__new__(cls, *args)\n", - "/Users/pkmandke/.local/share/uv/python/cpython-3.11.14-macos-aarch64-none/lib/python3.11/copyreg.py:105: FutureWarning: `isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.\n", - " return cls.__new__(cls, *args)\n" - ] - }, - { - "data": { - "text/html": [ - "
coreai-torch 0.4.0: converting 1 program(s) to Core AI\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[1;36mcoreai-torch\u001b[0m \u001b[1;2;36m0.4\u001b[0m\u001b[2m.\u001b[0m\u001b[1;2;36m0\u001b[0m: converting \u001b[1;36m1\u001b[0m \u001b[1;35mprogram\u001b[0m\u001b[1m(\u001b[0ms\u001b[1m)\u001b[0m to Core AI\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", @@ -1213,10 +969,8 @@ "exported_program = torch.export.export(coreai_model, example_inputs, strict=False)\n", "exported_program = exported_program.run_decompositions(get_decomp_table())\n", "cast_to_16_bit_precision(exported_program)\n", - "print(exported_program)\n", "\n", - "markers.subexport_and_restore(exported_program)\n", - "coreai_program = TorchConverter().add_exported_program(exported_program, externalize_markers=markers).to_coreai()\n", + "coreai_program = TorchConverter().add_exported_program(exported_program).to_coreai()\n", "coreai_program.optimize()\n", "\n", "output_path = Path(SAVE_DIRECTORY) / \"exported_model.aimodel\"\n", @@ -1225,108 +979,6 @@ "coreai_program.save_asset(output_path)\n", "print(f\"Exported: {output_path}\")" ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "79b829c0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "module {\n", - " coreai.graph private noinline @model.4.norm_02258695(%arg0: tensor<1x2352xf16> {coreai.name = \"input\"}, %arg1: tensor<2352xf16> {coreai.name = \"scale\"}) -> (tensor<1x2352xf16> {coreai.name = \"mul_2\"}) attributes {__coreai_pure__, composite_decl = #coreai.composite_declaration<\"rms_norm\" = {input_names = [\"input\", \"scale\"], op_attrs = {axes = -1 : si64, eps = 9.99999974E-6 : f32, version = 1 : si64}, output_names = [\"output\"]}>} {\n", - " %0 = coreai.constant dense<1> : tensor<1xsi32>\n", - " %1 = coreai.constant dense<9.99999974E-6> : tensor\n", - " %2 = coreai.cast %arg0 : tensor<1x2352xf16> to tensor<1x2352xf32>\n", - " %3 = coreai.decomposable.broadcasting_mul %2, %2 : (tensor<1x2352xf32>, tensor<1x2352xf32>) -> tensor<1x2352xf32>\n", - " %4 = coreai.reduce_mean %3, %0 : (tensor<1x2352xf32>, tensor<1xsi32>) -> tensor<1x1xf32>\n", - " %5 = coreai.decomposable.broadcasting_add %4, %1 : (tensor<1x1xf32>, tensor) -> tensor<1x1xf32>\n", - " %6 = coreai.rsqrt %5 : tensor<1x1xf32> -> tensor<1x1xf32>\n", - " %7 = coreai.decomposable.broadcasting_mul %2, %6 : (tensor<1x2352xf32>, tensor<1x1xf32>) -> tensor<1x2352xf32>\n", - " %8 = coreai.cast %7 : tensor<1x2352xf32> to tensor<1x2352xf16>\n", - " %9 = coreai.decomposable.broadcasting_mul %8, %arg1 : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", - " coreai.output %9 : tensor<1x2352xf16>\n", - " }\n", - " coreai.graph @main(%arg0: tensor<1x1x28x28xf16> {coreai.name = \"x\"}) -> (tensor<1x10xf16> {coreai.name = \"dequantize_5\"}) attributes {__coreai_pure__} {\n", - " %0 = coreai.constant dense<[1, 2352]> : tensor<2xui32>\n", - " %1 = coreai.constant dense<[[[[-1.202390e-01]], [[5.975340e-02]], [[1.311040e-01]], [[-2.587890e-01]], [[-1.365970e-01]], [[-1.278080e-01]], [[-5.783080e-02]], [[-3.754880e-01]], [[4.171750e-02]], [[-1.052860e-01]], [[-3.027340e-01]], [[-2.648930e-01]]]]> : tensor<1x12x1x1xf16>\n", - " %2 = coreai.constant dense<[1, 0]> : tensor<2xui32>\n", - " %3 = coreai.constant dense : tensor\n", - " %4 = coreai.constant dense<2> : tensor<2xui32>\n", - " %5 = coreai.constant dense<1> : tensor\n", - " %6 = coreai.constant dense<1> : tensor<2xui32>\n", - " %7 = coreai.constant dense<[0, 0, 0, 0, 1, 1, 1, 1]> : tensor<8xui32>\n", - " %8 = coreai.constant dense<0.000000e+00> : tensor\n", - " %9 = coreai.constant dense<0> : tensor\n", - " %10 = coreai.constant dense<0.000000e+00> : tensor<1x1xf16>\n", - " %11 = coreai.constant dense_resource : tensor<2352xf16>\n", - " %12 = coreai.constant dense<[1.654050e-02, -5.519870e-03, 3.974910e-03, -1.425930e-02, -4.711150e-03, -8.491510e-03, 1.428220e-02, -2.170560e-03, 2.095030e-02, 6.191250e-03]> : tensor<10xf16>\n", - " %13 = coreai.constant dense<3.410340e-03> : tensor<1x1x1x1xf16>\n", - " %14 = coreai.constant dense<0> : tensor<1x1x1x1xsi8>\n", - " %15 = coreai.constant dense<\"0xAAC3B8BD3FFD3B3916CF2BEEFBB3DDF73DE4FD58D11907D6B7E1CE272FBE184F449ABF122A2B45D8E1DFEFCA3639F9F69DE1533527C6ECF7393268DCD591E1AC5120283DB053D2D61BD2212A07DC05F4D3E6287EE8FEC995EDB53B810138E1C12D41E143C1BF4DF7B5232AE6\"> : tensor<12x1x3x3xsi8>\n", - " %16 = coreai.constant dense<1.631740e-03> : tensor<1x1xf16>\n", - " %17 = coreai.constant dense<0> : tensor<1x1xsi8>\n", - " %18 = coreai.constant dense_resource : tensor<10x2352xsi8>\n", - " %19 = coreai.constant dense<2.212520e-02> : tensor\n", - " %20 = coreai.constant dense<0> : tensor\n", - " %21 = coreai.constant dense<1.776120e-02> : tensor\n", - " %22 = coreai.constant dense<7.025150e-02> : tensor\n", - " %23 = coreai.constant dense<1.512450e-01> : tensor\n", - " %24 = coreai.constant dense<0.000000e+00> : tensor<1x1x1x1xf16>\n", - " %25 = coreai.blockwise_shift_scale %15, %13, %14, %24 : (tensor<12x1x3x3xsi8>, tensor<1x1x1x1xf16>, tensor<1x1x1x1xsi8>, tensor<1x1x1x1xf16>) -> tensor<12x1x3x3xf16>\n", - " %26 = coreai.blockwise_shift_scale %18, %16, %17, %10 : (tensor<10x2352xsi8>, tensor<1x1xf16>, tensor<1x1xsi8>, tensor<1x1xf16>) -> tensor<10x2352xf16>\n", - " %27 = coreai.quantize %arg0, %19, %20, %8, %9 : (tensor<1x1x28x28xf16>, tensor, tensor, tensor, tensor) -> tensor<1x1x28x28xsi8>\n", - " %28 = coreai.dequantize %27, %19, %20, %8, %9 : (tensor<1x1x28x28xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x1x28x28xf16>\n", - " %29 = coreai.pad %28, %7, %8 mode = : (tensor<1x1x28x28xf16>, tensor<8xui32>, tensor) -> tensor<1x1x30x30xf16>\n", - " %30 = coreai.conv2d %29, %25, %6, %6, %5 : (tensor<1x1x30x30xf16>, tensor<12x1x3x3xf16>, tensor<2xui32>, tensor<2xui32>, tensor) -> tensor<1x12x28x28xf16>\n", - " %31 = coreai.decomposable.broadcasting_add %30, %1 : (tensor<1x12x28x28xf16>, tensor<1x12x1x1xf16>) -> tensor<1x12x28x28xf16>\n", - " %32 = coreai.relu %31 : (tensor<1x12x28x28xf16>) -> tensor<1x12x28x28xf16>\n", - " %33 = coreai.quantize %32, %21, %20, %8, %9 : (tensor<1x12x28x28xf16>, tensor, tensor, tensor, tensor) -> tensor<1x12x28x28xsi8>\n", - " %34 = coreai.dequantize %33, %21, %20, %8, %9 : (tensor<1x12x28x28xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x12x28x28xf16>\n", - " %35 = coreai.max_pool_2d %34, %4, %4, %6, %3 : (tensor<1x12x28x28xf16>, tensor<2xui32>, tensor<2xui32>, tensor<2xui32>, tensor) -> tensor<1x12x14x14xf16>\n", - " %36 = coreai.quantize %35, %21, %20, %8, %9 : (tensor<1x12x14x14xf16>, tensor, tensor, tensor, tensor) -> tensor<1x12x14x14xsi8>\n", - " %37 = coreai.dequantize %36, %21, %20, %8, %9 : (tensor<1x12x14x14xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x12x14x14xf16>\n", - " %38 = coreai.reshape %37, %0 : (tensor<1x12x14x14xf16>, tensor<2xui32>) -> tensor<1x2352xf16>\n", - " %39 = coreai.quantize %38, %21, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", - " %40 = coreai.dequantize %39, %21, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", - " %41 = coreai.invoke @model.4.norm_02258695(%40, %11) : (tensor<1x2352xf16>, tensor<2352xf16>) -> tensor<1x2352xf16>\n", - " %42 = coreai.quantize %41, %22, %20, %8, %9 : (tensor<1x2352xf16>, tensor, tensor, tensor, tensor) -> tensor<1x2352xsi8>\n", - " %43 = coreai.dequantize %42, %22, %20, %8, %9 : (tensor<1x2352xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x2352xf16>\n", - " %44 = coreai.transpose %26, %2 : (tensor<10x2352xf16>, tensor<2xui32>) -> tensor<2352x10xf16>\n", - " %45 = coreai.decomposable.broadcasting_batch_matmul %43, %44 : (tensor<1x2352xf16>, tensor<2352x10xf16>) -> tensor<1x10xf16>\n", - " %46 = coreai.decomposable.broadcasting_add %45, %12 : (tensor<1x10xf16>, tensor<10xf16>) -> tensor<1x10xf16>\n", - " %47 = coreai.quantize %46, %23, %20, %8, %9 : (tensor<1x10xf16>, tensor, tensor, tensor, tensor) -> tensor<1x10xsi8>\n", - " %48 = coreai.dequantize %47, %23, %20, %8, %9 : (tensor<1x10xsi8>, tensor, tensor, tensor, tensor) -> tensor<1x10xf16>\n", - " coreai.output %48 : tensor<1x10xf16>\n", - " }\n", - "}\n", - "\n", - "{-#\n", - " dialect_resources: {\n", - " builtin: {\n", - " resource_542530633011197160: \"0x10000000FA3B013CEB3BFF3B213C403C173C2F3C053C283C0B3C243CE03BF03BF43B043C193CEE3B193C1E3CE33B173C033C153CF33B163CE83BF23BF03B083CFD3BB73B0D3CFF3BF43BED3BCF3B0C3C0F3C193C0A3C033C083CFB3B293CE83BD43B273C343C5A3C593C4E3C883C6C3C5A3C0E3CF93B113C493C0D3C143CF33B4E3C483C373C333C893C733C693CF93BFA3B213C193C063C1B3C643C813C8E3C823C4C3C303C0F3C1B3C183C013C193C173C483C793C463C913C933C873C4D3C523C513C5D3C203CF43B293C193C333C633C513C583C573C673C733C693C4B3C423C223CF03B153C5D3C503C503C263C343C403C513C1D3C8C3C593C493C143CEE3B223C1F3C4E3C643C463C293C723C373C4B3C5F3C5B3C2D3C043CEC3B103C1A3C753C7C3C623C1F3C4A3C613C703C6F3C7D3C3D3CF73B013C093C533C513C6C3C8A3C6B3C773C7A3C833C0A3C293C013CF23BF73B063C233C453C603C573C7F3C773C5B3C343C163C153CEE3BEA3BD93BF03BDE3BE63BE63BE73BF63BDC3BD33BEA3BFF3BDC3BCD3BEB3BE33BF63BEB3BE43BF33BE13BF43BEB3BDC3B073CF83BFD3BEF3B033CFE3BEC3BD63BE93BDF3BFE3B003CDC3B073CFA3BDB3BEB3BF43BE73B063CDC3BF73BE53B023C003CE83BD53BF63BFD3BFF3BF73B033CE83BD83BF63BF73B033CF73B0A3C003C303C133C233C0D3CE03BF33B003C043CE63BEB3B0C3CE43B203C123C7F3C653C593C233CFC3BF73BF83BF13B003CE93BEE3B433C7E3C693C4B3C8D3C843C243C163CF53BEA3BE53BEC3B013C243C603C863C5D3C953CA03C6D3C433C293C063CF93B003CEE3BD53B513C753C9A3C623C7F3C4F3C4C3C143C0D3CEF3B013C033CE83BEF3B4A3C883CAC3C733C443C1F3C213C003CE33BEE3B023CFF3BEC3BFD3B3B3C713CBE3C673C4C3C413C013C123CF83BDE3BE73BF63BE83B003C143C2F3C633C433C593C283C193C013CFA3B033CEB3BFB3BCF3BDC3B0B3C0F3C133C083C383CE93BEE3B033CEC3BF63BD43BE83BE63BEE3BE33B063C0A3C1F3C153CF83BDD3B023CED3BF53BEB3BD43BF53B033C043CF13BDB3B063CF03BF73BFA3BE63B023CE93BC63BD13BEF3B033C013CE13BE23BE23B013C003CED3BB33BF83BF03B063C013CD83BE73BFE3BFA3BD73BD93BE33BCD3BEE3BE33BEB3BE13B003CEE3BF63BDF3BFF3B023CE73BF03BF53B023C173CE53BE93BEE3BE93BE23B033CF63BE73B033C103C0A3C3C3C603C4A3C693C0D3C003CF53BE43BF53BF53B053C333C583C453C2A3C4C3C8F3C5C3C123C023C003CD23BB83B0A3C273C813C853C6E3C2F3C3D3C333C2C3C183C123C033CEB3BF43B003C2B3C6A3CA13C6E3C483C313C3A3C263C153CDF3BE03BDD3B053C133C2F3C923C903C753C213C2C3C2C3CD73BF03B063CBF3BC63BD23BF03B383C6F3C2C3C5B3C443C0E3C263C313C283CFD3BD03BF93B023C243CF93B203C443C493C273CEE3B2E3C153C0D3CE53BD63B043CFF3B093C143C423C273C133CF73B093CFE3BF43BE83BD53B003CDF3B043CFA3B023C0B3CFE3BD03B133CCE3BFA3BEF3BF43B0C3CE83BE33BDF3BFA3BE73B093CF63BF43B063CF73BED3BFC3BE13BFA3BED3BEA3BDA3BEC3B023C073CFD3BC73BE33BED3BE93BEA3BEA3BD53B003C003C003C113C433C4B3C4F3C293C403C303C2F3C303C193C003CE23BEC3B1E3C283C6C3C883C923CAD3C9B3C4E3CF03B2E3C503C313C0C3C103C0B3CEA3B463C343C3F3C3C3C423C393C543C0A3C213C053CD03B1E3C5B3C603C3E3C603C483C5B3C723C873C933C3E3C173C653C413C473C713C2B3C603C5F3C4A3C663C703C643C703C333C0E3C153C3C3C443C2F3C553C263C173C7C3C803C443C4A3C663C1F3C0E3C403C423C653C543CFA3B453C4B3C723C413C483C4F3C233C143C243C273C3E3C393C3A3C433C473C293C4C3C9B3C573C6B3C3F3C2E3C303C3C3C4F3C5F3C503C0F3C193C333C4A3C573C2C3C2C3C533C023C0B3C3B3C5D3CEC3B4E3C553C433C293C733C543C123C253C1D3C2B3CFF3B1E3C523C2A3C273C423C093C283C3B3C4B3C2D3C373C453C343C3E3C213C2E3C173C0D3C223C363C393C3F3C283C143C033C433C2F3C113C543C1A3CF03B5C3C7A3C333C073C2B3C0C3CDD3BE73B043C1C3C0B3C443CDC3B003C3D3C4D3C603C843C1A3C403C373C463C0D3C583C253C313C0E3CDF3BE93BDC3BE63BEC3BD93B093CF33BFA3BDD3BF83BE33BF83BE33B103C153C1A3C333C473C2C3C2B3C303C603CB03C453C383C223CFE3B023CFF3BC73B163C083C1A3C343C4E3C373C433C273C8F3C0E3CCA3B1B3C4D3C2D3C3F3CF83B4F3C763C5C3C4B3C253C103C463C9B3C033C283C193CFE3BC13B013C493C6E3C193C6E3C453C393C563C543C033C273C333C163C0A3C1B3C2F3C983C453C233C0C3C3D3C443C6D3CE83B103C273C023C0A3C1A3C203C743C363C093C023C1C3C203C283C053C1B3C443C353C0C3C263C3E3C5B3C2E3C413C3D3C2F3C173C543C0A3C253C2B3C0E3C103C0D3C4A3C1F3C5A3C413C303C353C203C7D3C0C3C1A3C363C103C083C243C013C293C093C343C123C1E3C323C213C053C143C3C3C023C1D3C023C123C043C0F3C1D3C0F3C053CEF3B303CF93B2A3C233C313C043C083C413C313C073CF83B263C073CFE3B3D3CE73BFB3B383C163CE33B193C2C3C043C003CEB3BFB3B073C3B3C203C003CF53B573C343C393C6B3C2F3C223C1F3C2E3C193C173C2E3C2D3CF03B003C003C283C483C753C5A3C643C4C3C443C453C673C603C3E3C193C0F3C2B3C163C4B3C403C5A3C283C0B3C213C403C173C323C2F3C143C1E3C253C313C283C0A3C3B3C2F3C1B3C0A3C113C0F3CE33B313C533C343C733C223C143C123C2D3C563C613C163C0A3C463C2E3C3F3C543C363C683C023CBF3B103C323C313C633C2C3C223C183CD43B753C623C4B3C4F3C263C1A3C053C103C3D3C583C2A3C393C3C3C123C733C6C3C393C4C3C1A3C193C443C3A3C293C4C3C253C383C553C4D3C263C553C453C5E3C463C533C473C163C6A3C283C2B3C213C223C413C163C9B3C5D3C403C253C583C473C473C3D3C183C243C2E3C1B3C1E3C533C823C303C353C203C153C0A3C253C113CF83B1A3C0F3CFF3B0E3C283C8C3C033C2F3C313C183C023C213C143C103C1B3C1D3C0A3C163C483C5A3C263C263C5A3CDE3B0A3C203C0A3C453C333C553C2C3C453C493C4D3C3B3C583C503C1A3C053C213C273C093CCD3B033C163C123C3F3C093C003C053C553C323C623C5E3C4F3CDF3B273C1B3C433C483C153C483BEF3BF93BF73BF13B033CEA3BF13BDF3B023CF53BEC3BE03BFA3B043CF93B013C0A3C133C1D3C253C393C513C2B3C4A3C3C3C393C143C183C113C153C253C403C553C753C463C1D3C4C3C7C3C803C643C2A3CEE3B153C0D3C493C5B3C793C843C753C643C953C6B3C683C513C4C3C1C3C383C553C463C503C423C813C593C3C3C8E3C6C3C3D3C393C443C1C3C2A3C513C683C883C4A3C3F3C2B3C733C953C623C413C3A3C603C223C213C293C963C4C3C4A3C3C3C3A3C9B3C813C663C5D3C373C3D3C253C1C3C133C3C3C643C573C1C3C8E3C8A3C3E3C4A3C563C373C683C213C083C123C393C2A3C503C193C8C3C523C153C5B3C533C5E3C2E3C4B3C053C133C333C303C1E3C4A3C393C163C253C343C483CD73B313CFF3B003CFA3B173C333C273C093C083C363C1C3C1E3C193C253C263C143C143C1B3C243C083CDD3B1B3C2D3C063CCE3B123CFA3BF03B233C183CFA3B193C293C073C173CEF3B153C243CFD3B073C0C3C1C3C1F3C0E3C093C1E3C233C4A3C323C433C113C2A3C333C4C3C453C303C083C063C003C003C083C0E3C4A3C603C533C5F3C523C173C4F3C6D3C5A3C063C003C1C3CFB3B523C703C483C503C8A3C473C3D3C2D3C373C593CDD3B003C193C393C253C3F3C293C1F3C573C3A3C463C553C2B3C373C203C003C2A3C3D3C193C563C4B3C323C373C1D3C4A3C3F3C4C3C183C2B3C413C373C383C523C6A3C633C5A3C873C643CA43C863C793C4D3C313C3A3C4A3C2A3C583C6A3C4C3CA43C733CB53CD23CCC3C9F3C2D3C263C2F3C303C2B3C953C533C663C7C3C5C3C703C983C5F3C733C7D3C3D3C1E3C763C253C973CB33C963C7B3C593C4D3C463C3A3C123C6C3C223C003C533C663CD73C093DD43CB83C313C4D3C1D3C393C1E3C3C3C693C023C2A3C353C7C3CC83C9C3C833C283C193CEE3BC13B353C1E3C1F3C1F3C3C3C143CB53C383C253C423C043CDA3B393C3B3C483C1C3C153C0C3C453C163C463C553C013C0B3C1E3C3A3C2E3C3D3C303C543CBD3B003C433C453C863C3D3C603C393C673C653C1E3C1C3C3E3C1C3C0B3C003C383C8A3C373C5A3C623C2A3C373C803C6B3C613C333CFF3B003C043CF83BEE3BD13BEC3BF23BFD3BFE3BD63BFB3BFB3BDC3B043CF13BFC3BD53BF13BE53BE53B043C003C2A3C023C083CFF3BF03BFA3BEA3BDD3BF03BDB3B003C033C343C133C433C1E3C293C1A3CCF3B043CF13BEB3BEB3B043C0B3C2A3C163C123C3C3C283C1D3CF03BE53BEE3BC33BFB3BEF3BF73B163C143C1D3C0F3C233C1B3C293C0E3CF13BC53BED3BDB3BEC3BFD3B153C283C2A3C1A3C2C3C143C1A3C423C2D3C273CE63BEC3BFD3B0C3C303C1C3C343C493C533C223C363C0A3C1E3CF43BF43BFB3B003C053C093C103C303C5B3C233C173C233CF53B093C0C3CEB3BF13BF93BE33B043C4F3C293C103C163CF03B0C3C013CE63BEF3BFA3BCD3BE03B183C3F3C5D3C3E3C263C053C073CFB3BE73BDC3BF33B013CD93BDE3B123C0F3C2F3C263C053C073CF93BB53BD63BE93BEB3BFD3B013CFB3BCF3BE83B023C013CF53BC13BD33BDC3BF23BFB3BF33B003C023CD53BFA3BE13B033C013CC63BF23BD03BF03BFF3BE03BEC3BF63BDB3BE83BD93B003C033CF53B043CEF3B0E3CD13BE43BE53B033CD73BEA3BD63BE23BD53BD03BCE3BFA3BEC3BEE3BE93BE53BE73BCE3BDC3BEA3BF53BE73BEC3BDA3BF83BF33B1C3C013CEF3BFF3BF23BD93BCB3BD93BE03BD93B033C1B3C473C603C6B3C543C1B3C043C043CE73BFB3BE83BEE3B103C303C4A3C833C7C3C743C3D3C1C3C2C3C083CF33BF43BD93BFA3BFC3B553C933C9A3C8A3C943C6D3CC83CA63C263CFD3BE33BE43B173C1F3C553C963C913C613C883C993CE03C863CFB3B003C0F3CF83B153CFF3B493C7A3CA63CC23C7A3C893C863C8A3C053C103CF33BFB3B1B3CF43B3D3C693CBF3CF73C683C613CB03C333C103C083CDC3B023C0B3C0A3C303CC93CFE3CDC3C8E3C913C5D3C3A3C073C023CF33BD33B003CF43B403CB43CBF3CA23C743C163C153C2F3C203C0B3CDE3BEE3BE83B083C223C103C653C313C3D3C413C713C4F3C223CE73BEC3B043C083CF23B083C373C613C4F3C1D3C413C443CFB3B0D3C053CE93BF93B063CF73BD33BE63B083C083CF63B0E3C093CE63BF03B063CE93BF83B033CC93BEA3B0B3CF73BD03B0A3CDF3B183CF73B043CF13BF13B9F3B003C093C163C793CA53C5B3C513C323C273C713C603C393C0F3CB23B093C3B3C423C463C523C083CE93BE03B043C313C1C3C453C023C903B4D3C133CE63B0D3C083CFE3B063CF03B023CF43B2F3C203C653CAA3B353C573C513C573C833C423C393C333C2C3CFE3BF93B023C1A3C7D3B1E3C553C653CB73C723C3C3C133C633C573C473C353C253C383CA43B063C033C753C983CB53C5B3C403C083C073C413C693C783C573CA23B0D3C493C723C793C863C7E3C4C3C153CFA3B193C603C763CDC3BA73B373C6E3C5E3C313C4C3C583C643C1D3C283C083C303C1D3C473C473B3A3C413C4C3C6A3C023C313C383C3E3C373C123CEE3B133C1F3C863B1C3C3D3C253C383C103C483C1F3C093CD93BD63B053C1B3C783C903B553C243C3A3C293C273C3D3C0A3CF23B043C013C1A3C1A3C3E3C263B123C1E3C4C3C4A3C223C3B3C2C3C363C433C323C123C2A3C0A3C833B013C053C493C413C4A3C833CA13C713C453C1C3C2A3C193CF93B003C003C293C433C9D3C763C923C5F3C553C323C543C503C2B3C0E3CE13B003C043C353C773C643C6B3C3E3C453C473C6F3C7F3C383C193C073C1D3C3D3C453C4E3C4E3C0F3C143C053C2A3C3C3C2C3C3D3CCE3BD33B4F3C2C3C4A3C133C213C013C123CDD3B113C033C2F3C203C373C013C2F3C4B3C6D3CA83CB03C453C1B3C203C3C3C2D3C323C0C3C2D3CDE3B243C343C703CE23CA53C753C493C933C8D3C5E3C463C0F3C2F3CDD3BED3B123CA53CF33CD23CA43C2E3C4B3C753C443C653C3A3C523CF93B1F3C673CB73CBB3CA23CA03C4F3C2B3C133C1F3C6B3C663C2E3CCC3B423C4F3C7F3C913C6A3C753C903C073C013CF33B363C2B3C393CD13B413C2C3C4C3C5A3C3E3C853C1E3CE33BF53B043CF73B1D3C433C013CF83B373C463C473C593C263C0A3CDB3B163CF63BC23B373C6B3CEB3B563C243C643C3B3C543C493C173C033C043CF83B073C2E3C433CCE3B4A3C103C473C4F3C463CA83C2A3C273C423C213C033C353C173CD13B083C053C603C7F3C913CAC3CB23C6A3C253C4D3C263C273CFE3BDE3B003C033C573CA43C873C673C6B3C2F3C573C583C483C0A3C0B3C\",\n", - " resource_9033393555234838650: \"0x10000000FEFDF70CF901E8CBEEE0F50A0001FF05ECFFF9FCF4E4FCEDF1FFF4FAF8F2030401F6F9F407FCF503F5EC120C0B0502FB04080702F7FD0C050C05F3FD03FA08F6EDDDD8D4EBEEFC02F60A0A0BD9B4B8C8D2F9F6EBFEFE000B19FDCFAEBFCBD3DFEDF9F8E50BF4F6E8B5CAF3E309F0DEF1FDEAFFE6DAD8D41421FC0BEAE4FC10F7F1D8E5F910191D21F5E0E9F90901EFC8DDF20724180012E8090A0DF6E4DBD7EE0A230C060DF70CFA07F7F9E9E3EAD3FA03FFF30502F9FB09F90D070B0F030007090A04F6FE02080EFAF601FE06F80DFF01FC09F6F9FC0A0AFEFC13000204F7090DFFF901110104FBFFFA0503FD03FC02F90509F7FC07010709F7FF080D0301FE03FCFEF8F0DDEFFC000102FF05E8FAFF0A01E1DFE2E70B0501FC07ECE5F7F914F2E0D6D4FC00F70AF4DFD5F3FF220FF5E7DAE8FBFB07FDDED2F5F70402FAEFFCEFFE0B0607EADDE10D0F06FF0502F5090A0EFFEAFFE1EB131514F90AF80304F604F0F8EB050EFA07020D0102F90608F9FCFE0802F901100DF6FDF7F50803FB0BFF09FE04040D0AFA0DFE04F6F7020303F809F8FB02FDFD0406F601FB150D07110AF9FD010206FF010304FC0BFC09F1FEFC0201FF07F8F5EBE8E9DEDFE3F00705FE00F5F5FFFDF0DDCFC1CFEB06020AFDF7F20FF4FDF7FCE1CFE909070E0EFAF9F5F20E0F0CF8F6EAF5FE01FC09F2EDF1242E00130B040B010B010FE7EAF4091C1D1808F90BF6F810F9F9E3FBF819220CFC0AF90903FBFAF0F0ED0A16071305F90E050807FE03FB02FE06130CFF08010DFA00050C0F00F4F6F407F2F6FDFBF8050B07FCF7FD03F6FC0202F8F8F9F5FCE8E6FEE5F70BECDDFDFEF9F1ECD2F5E5D408FB0CED08DCE9F8FADEE8D101E2F1FE0600F8F0F8F1E9C5F5E6F9F7F80F060E0A1B00D7EBFA01E7F6F3F9FB0D17121C03CDF9F90CE4E2F9F20F0D040E1009C0E7FEE8F2E3E6EEFAF2E5F10BFEE8D8E9ED06E7F9F2ECC7E9ED0600F9E0E60401F9F3E1D5DDE6F0F110E6DBDE0904FC17EDE1EEEFF4F2FDF1E6DC09F8F7100EE5EBF3F0F2F6E8FADCFF04151816120FFAECF3E8FBEFDAD1F305FB120801E1D1D6DEE3FDE8F7CFD9CECECBC4C4D5CEDCF70CFCFC0809090809050BFEFF060903FFE6EF01F6041016EC0BD9E8F8E7DEF9FCF8F602FE04FC00E0EDFFECCE06E1EFDEFD09F8080F01D5060CE508F8FAF8F510141F1613F30F10FC1FFF17F9E3F71D090C010BF5EBDC080900EFD5E8FD061B14ECEBE8F20C09FDD6E0E7E1F90CF5F6FBD6FC0C0CF9D4DEBDDDFEF5050A05E706FB0E0CFADBECF2EDF3F60903EFFB0606111DF5FBF30303EAF705EFED080EF91410F801EBFAFCE50BF0C0FA031E1B110A03ECDFE2D9FDF9F2DAC9CBC0BDBFB9D1C6DDF2F9080AF7E3F1D9ECE7CEDFC6E0E2F0FDF7D0EAEAEDEB00DEF6F115E8E3EAE2DDFEF4F70B0C06F6F604E8B5DAC4F7EAF8F400FD1D071AFEF4F7ECEEF8FF05FE0C09061DFB05F0EF02F0FE17061A0B09F1F707FF0ABEFFE2FC0A2108F4EFE0EDF90AF3D6DFC715090B01F8E1FFEC081000B9F2ECFC07F9F8EBEFEBFCF60F05EDE4F50C0AFEF8FAFE060309FFFBDEE0F9F200F809FAFCFE081A08EDE7D8D019FD00090E020AEAF1DCE105DEDCE3FD0014201106F4D8DAE6D9F9EFDDCCDCC4C2D4BFCCC1D4E2F5FDFFFCFF0DFBFBFC0DFDFC0AF909FF07030612F8FEF9F8F8FE050610FFEAF0F0EBE0DEF1FCE5DAE6F0DBF5ED06E1CADFFAEAEAE8E4ECF6F40003ECFAF6F7EAE8F3E0E4E403E51A08EAEAEFFAE805F1D5C5F5EDD803F3C8EBF5F9F9E5D2DCFBFAF9F001E3FBF4FEF4E0CED2EAEE0C0BF8EFDEF1EFDBECD2CAF90AF7F6FE06E1F8D8D6F8F6E10713FFF811FCFBFDF2EBDEE40A1500FDED05FFFBF6E3F8FE040A0E0B0FFE0CFCF9E50EEAE50BF50AEEF1F5F0DBD6E9E60FF4F9EAE9C8CAC1D1CBD8F0E7F2F4020309F2FFD5F6CDE6D9D8DBD6E0FA01EFE8D9F3EEE5EBCFE0D9E9F4FAFED5FC02E9FF0E01ECFF0BE5CE0AE4DBF8F40410F3FFF8F61212F4D7CFFE101615070B0302030F11E5E6FEDF26210B1012EAE5FD0511E5F9FE00221C262600EAF8021C25E4F3FC1B231E2918E2F7090E1126E9FDF5171B1D251A011416120F1CD402F913100D1F0210170F041BE9E41BE0E6EDEA0020000710031FEEF1DFF3E2EAD3F7F609000F0201DB00F5DAFF02D6E2E6D7E9CFC2CAE0E9F4F7DCC2CFB6C3CCB7C7CFCD09F901FCF908F50DFDFEF902F803FD05050609F7FBF5FCF5F5F2F3FB0703FBF70D02F7FCF806EDEB01FEF60901FC03F2E4E6F5E4F0F6FD031504F6FC01F3EB05F5F2F30A01100B0D04FDFBF60F0D07230304051928FFFFF9FD050B0F2524EB0DFC1019FA0DFCFFFA16113F16EF0F0610190D0B00FAF6081E27EE01030EFC0CFFFE00E8F9200C0AFDFE09010A0108F60BF5EF1C07FCF5F7F8FF09F6FEFD05F9010011F80901FFF7EEEFF90C060F02080500FB00FBE3F70807F7FA020101FAE4FAEFF60203F7F5FC0B07FC08F6FBF8F8FB04F8FBF800FA0E0EF404110A19180403FA040104F90B03FFE309020D0214FEFE02FB03E2DED9E903050407F2030102FCF0F3EDF8F2F0110A01F004081109FDE2F0E900F7EF0E00F8EF0EFBE6F9D2CFC7DE0C070F1AF8EF0800EAFBC9C4CBBDE60D0503E4F6FE0AF604ECC3C0D2D0F208FCFAFC00FAFD00F201DFDF200B020201FE04F8F9FEEB0A2207F9EEF4F2EE0201F7FC0A0DFF1100F8D8DEF1F803F607EAFEFE0E0B12F603ECFFF0040000FEFCFBE8DEEDE5EAF7FBF50208F806F100E5C4E7C0DDD3C4E2EAE500F9E1D0FEF6F7FAF0F3EBF4EFEC04E8D5E2E7FA030E050BFE07F3CD12DDD8FAFEF3F40718160A0E0BE30A05E8EEFD080B091E1B292520E9F906ED00F00A04060B142C262BEEF90AFB0D0E1712F8F6F51D1824FF03DE050B00192107F6EE080E13FC0ED9180D120D13FBE0F9F80802EEFDFA0B1425142EFDF2FDF7E8F4EEFDE00E0C181918ECEAE4E9F5F0E10BF5E4131B160BDAECD7CBD6E3DF0FFBFEF3F8D4D5A8BCCAB7C4CFE60BFBF1E1E4D9D2E1C5CAE2C8C301060102ECF4B9E9D6D0E6C1DBE5EC0BECE8D3EBE4FDFDEBE6D7E6DAEC04E0D3D5E6F5F213FC02FC01F1D00FEBD5E6F2EEF2120E1A111A0DD8FA0BE3FBE20B0BFD1A22170D22F40CDEF2F5030C0A02FF251C2A21F107FBF30D1B16271808FC0F1118FD09E703181D172D1BF30A0F10220106D916141D272CFE0004030019EBF7081B11221D28FAE1F5FA030BDE07F6150720261DE9E4D5ECF6F2CE0CEAFB1511161AEAD2C6D1DADDEC07FAE4E5D9D7BFABB5E3B1CACDCFFFFEFAE0EBC5CAC0CCD1CCCED4040F0BFA03F6F4091B0D1612090D020A0E13EE05FA071007150EF5F807F80F18FFE8FCEC01FD061909FDFF0704F7F8EAF3E5D7DE0801F5DFFFFF05EF08F8EEE5FBDCDEEBF8E50001FCF0FE03E6FA07D0BFEDFE02FF0C0DFEF9FFDD0401C0D7CBFBF90A0408FB05F8FD03E2C1C5D8F40C020205FDF4F1F3D9D9BEFB0D101E14FBFFEC151D08FCDDE719151901FA07151B21211503D5CF0E0EFEFB0E10FA04EB0CE1CAA9C7E7F007FC070602F4FCF6E8E8F4FEFD0EFB00F80F080914130F0E09031611021204060DFEFD100810FE0710000CFF1314FE021011171301051301090A0210090E0B0E06FB05FE040D080C08FF0312080D0F01200710140B0A140C08FD1009160209170E0B05FF090E0F1504150B18170713050F081409030C02201B0507140F0E030F06150800040E1CF6F10F1B0A0F000A10081205161B03160A1E1413051008FE041A14391E19200E16020708100E130904120C2E041205020B000C040C04120E15210F0A120712FE081407010F1D1A19040811110A120E060F150AFE100C05FF04140106FE04150C09081315140F03130B130F0A1616120906000C020A0F06140515001319180203F90DFE0905150D120F0910110B190611FA02040916030C010C17FFF9FE021614050B040208181217FFF2E0F707110E0E070B0B02121C0CDFF60E170E0101FF0E170E1E1BF6020F07020412130709001C1C1A0A181507190B04FE140D1E12111109FAF701140F0416141417110C27F4E4EA0B0C000C14091519100A160808FE1A060C1A041110120617071712071618010C120606070A0F07FF070C100A090614F50800E4E0E51AFFDCE5EFFAF501FED6E5DDD0ECE7C6D7F6EED8D3091205FFE316EFD7F0D7CBE6EEEDE5DE0904F6EC01EBD2CEC5F6EDDBD2E9C8FA00FBE6E3DFD8E1F8FADCC9FECDD8F0FEF8E0DAF7F9EBF4EBEECFDAEDDFECDFEBE4EEFEFAEDE4E5E2E1EEFEEED1CAEEE7E5DBE6F9EA01D0E8FFF6E4DDFBEDDFF2FDFFD5EFC8D7E5F5CBCEFBE6F900FBFCF3E227EBFBF4F0F9FE041715080500D80D1FFFFFF6F1F3F91702F5FC15F7BDF0F50F03F90B0304FEEDCDF9FBE5D2CBEFE3D50EE2BAC5DCE6E609150A0A00001D1103170A0F160F10FBFB000E182611102D07F7EF0F12F90BE503F906FC0300F7EFE800ED090C01FEE0E4D6D3C7E1E4E80CF2EEE7F4FFFFF8F6DAC0E3E1D207F7F6E4FDF4F10FFAEFE4E6EBE005E8F5DDEBDDEC03F3E4EC03E4EC0E07F8E7F5E6F4FEEBCFE8F2DFF106FCCCDEFAEAD503F7E1D7CFFAE012EEEDF6E8DDEEFDF3DEE6F30DF50EEF17F3FF02F90AEDF3080E010C0DEA1A140E0AF9FEF9071806FFFFFC02D70902F40EFF070A0A0DEEDE0101E6D8E3DDF203EFD1C7D2F3F80DF7F4FFD9DFD21A27140506E2EBE401FEE5FDFBFF1008130616EEEBD41508F9E7DDD8F8F40107090AEFD6D80D00F9E7F6DFEDF60105F2CFC4D8DFF0F7E9E8F4F9FDF70806C7C5F5DCF0EAF3F7E2FAF7FFF9F0D8CFC9F405EDF0F105F9F2E7F7F1EAEAC50DE606EAF4F4F8CEDDF4CBE2DD05DDECDDEBDCEDEADBD8F5F5F2F5EEBCDEEED9DA09F5EDFAED0C0AC2C7130B0B0DEDDDE4E6E8EE0B0D22D90A120900EFF4EBFA0808020311FEDDEA0308EEEE00040C0AFDCDF60AEDBBD4E4D7E0F4E5BDBEDFE80604110B0505080EFA0D0DFE10030E06F4EBE9F2FBE6DDF2FF01E7FA001804E6E6E8CACCF2DFF30EF4F8FB100E0AF0EFDDDAB2B6EBF9F6DEEBFBCD01F600E7D9D8C4E3F400E9DFF0DEEF0609FCE7CCDEEE00FBEA05F5F4EAE5F5FEE3D6EB06FF01DDECF7190D110901B9D3FCDCE8E6050A0500110BFCEBC3F5E4CBFEF9F7E708F30803E6D5E9DCD5F2FD03FB10FA04FB1018F2FCE90D080D120D15EC1F271D0BE5E7FAFB0D02FFFF1601E702F4FAFB01FBF0FC12F8F7FBF8EAE8FDEFFCF3E3E1D2E2EBF3FAF4FF01F3EAC9DD1422F9FCF0EEEB001CE9E7132008240A1808F7EEEAF5160DE8D10908160D17110BFFD30AF8F8FCC1E6ECE700070907E2D8E7EAF1F0E8F1F1F2EF11F905DAC8F5CFF3E4F1F7DBF8F5F6FA06DCE4FAE105F509FBFAF40100EEEAD4CBDB0705E70C100A0304E3F0D5C8D00AD6E6E009EBD906ECE6F6DDF5F313C3E5EAF5E8E5F1EAFB02021011E9DC152BF1EAE0DEE4FEF908FE0CE8F3191510F4E9E8E0FDFEDFD600FFCE0BF013ECEAECCAFAE9EFD81700E0C4CDEFD10AE3A6C0DAEFFF03100902040C080312010B0AFE07091404080200110E0304150A09130B1304FD060D230B1916010B0303060F09140902FAF0FC10FDFF0000FB11090F0E0EF3EBE00508FB07FD030903091116F0F6F3FF0E11FAFC00091005000F0CF50E180E09090307070E061710FDE3111104FA0201090B02FF080CFC040810E4F4020B02FF00150EF4090FF6EBF0FE010D05FE010916061502F1FD0808130904100B0907030F0BF6FEFC0815000F160704FE050F08060E0E170E01010615090CFC0AF8FD11FFFE0B0AFF10140E0F0F0C19080B18050C010A1315010A0209090705FC1312050714130412FCEFF1F1DF07090A0905070E15FCFEE9E0E1E5E9E3FE070B020802FD0DEED2E8CCD9E5F80516091015141EF5EDE7DBE80A0A0B150E06F9FCFCFCCCE6CC080CFF0C08FF17170E0AE1D0F0F61408170BFF1600FB1CF3DAF8F6DA0D1702000C160D0E16E3D0F901FD11170912FE1107F901F5DBFF072A1A1B160C0E131C1708FFE5FD191612061A0E07140108FFFE100808031A0C090902150FFBFFEFF30BFFF9FE0F030C13010AF5E6D1DB1C1715FF09ECDBF209090CF507FBF0090CF814E8E5E3111BFE0BFC07FEFEFE071505F4CB0BDD010C0E03FAF3FFF90210EAD806E1F705FBF4EDFB02070203F1CF07E70EF8D2A8DFFE0C0100EFE0E70BD60CEBDFB8D8120D02EAE0E5D8180E12E2ECDADA0E0CEDE1E0E8C211F8E0C7CDEDEF11F6E6E5ECEDF50CF1D7D6ED0B0400080901F1FB050FF20BF7F60C0203040F0BF208210C03F002EC0B0D0F170B0DFED0100A00FBF90B05EFFEF4030503B6ED13F8F7ECE0FEE1F7DDCDD2D7EAF409F5FEE4E3D919110A09F8ECDAFA1311F2FA0CFDF0FB0A0310F7E8E7120F0311091C0D1217000C1301CF11F20C01160EF605F2FA140603C9FEE701FCFEEBE81AF9FE03FCF3C5FCEE09F6C0B7E80D111003F6F5DB06C310F7DCD3E60C10FCF3F1E9D507090DDFE1E9ED1710FEDDCEC8C11311DBBCC8E401110DF5EAE0EAEB13EDCCBCDBFFF808F4FEEFEE01140D09F8D1E5F9F1FBF4F90504042AFC11D71501140A0808FC170BE71AFCFFE11B18180006EDFE0501C30513F8E6CDCDF4DDE5EFB8CDD7EB050AF303F70F18FDF211F7FB03030207FDF60A1A0E05FDFDE8F5E4FEFCF50403010CFFF7FCF0F3E7EDEE03080702FA010700EBCFC1C6E3F904F7F10C070800E0D9DDE6ECEFEFF1F1ED170EF8ECEAE0E2E9EFF1FF19F309103340392B120909F6042F23051C1A31283228181C20192C2926F60D11051B0E1F0A121128261B16FDFEF9F3F506141728222E2D18FBF705E7E0D9DFE40D0D1C3F4B2DF801F4D9E4DADAF3FE082E1E231700F2F0EDF6DCFAE9FF0708010A0A080408010108F606090AFD050401F60A02F60BF8FC05F9FFF8FEF60704050503F500F1F704F3FE03FC0802F8FE0A0200F9FEF5F5F7F8FD010B02F7FD0305FF0306E8EFF6F2F6F7FA0AFF110516141CF3DCFDF1F8FCF909FC0B1932232B0EEAEEFF0802030C081835302D3806E6F5F1F90604F3050C1C17FF190CFD0C07FA07F9FBF8ECEEDEE3E5F7FF04090AFB00F3EDE9DFD4E3EF010D14FAFC030508F5EEE4E6F2F80A201213FDF6FD0101FDF30706FA0A100A0002070508FF090E02040BF4F7FE09FEF9FF09F7040207F9FB0B070AFCF301F5F302FA040302F3090204FA00F6FC020AF4F303F3010802FEFFFC00FCF80A02F907F3E9F8E8FCF7F201F5FE030602020CFCE7E8E3FAF0FB03080D0A1519191003EEE6F7F3FEFF00060F182830201AFBFFFE00F402080A261F24211D1807110009FFFCFA00021610F70F1E150A0D090F0A02FBF0F5E80221FC171617150700F8F9FCF0FFFA06F609FB10040006FF0300E907EDF8F7040D1100FE04080AFFF706FAF80202FDFEF8F8FBF802F50800EFEEF30FF60BF8F8FBF60509FF020100F5FAFBFAF904FFF4F5F1E1DAE9150BF0EC08FE06F0F5070C2B2934462502EDF91407EFF6ED120B161820192203E3F2FEE816EB080A0D0B151C1C14EBC8FEDA0BFFFA1A020A170DFCEEF6EFF8B8070F0DF60C00F3FAF8E4F4E2E9E5DFFDE7FCF1FDD8E1E4ECE0FC14EA16D1D7E7E705F8EDE0E2F9132E0725FFE3EDEAF30101EC080D1737EA0D0701ECEBFDF917161813191415EEF0F3FCFCFF0A272B291C09180A0C0803050A03FD0A322C030DFFF5CAC5DBFEF6FF0B0C110BFF030308E3DABDA8CAD5D0CBDFE3C6E014FC0A08F50104FC00F1FFF9060AFFF9F2060E1213F9FCE9ADB7020EF2F4F80809190410280A19FED5DDFBF617ECE900050B1914171CDBC802E4050A0113F80F081516FDCFECFEE0ECF1EEF6FAF5050901FAE9F004E0D6FEF7F009EDE7E5FBF2EA17FC02FCF8F70CFDE8EDDDE5DCF02A17010913150907E7ECFFDD041E3C13071E170317100AF202FE1F191B0E08F8000F030D000A161511121FFC1217F8F5F70107F50F2214060707FDEEF2010212FC0409020A020CEF0ADFE9D5CFD901FD0AEFF0E4D70A0AF3EC09FB0B06F2E9FBDBEB1B0BFFC9F4F8090410F7F2D8EFE5D0D1EDFEF6F71018FBFE04E1EBFDD6D8E412FD05F41802F9F5ED06F6EC01EA07030102EE07F0F6EE0202D0DDDD0A11E2E1F1EE05EFEF0104F40FDDFCEBF3F5F2EAFA0B00F7F31220EEFBFFFBF6110F0EFD03F4141C46050E031717111A16FBFBFA012F3DD117111E0209180715F91517193EF607F2091507FF06FD19010F270F150502F902F2FDF508291C021033DDC6E6ED0306F5FAFE0209170AEF0BDCC6D9C8C8E5FCF4EBEBDED106FCFC04F8F4FDF3FCFEF2070B0504F8ECF60803182427E6DFE3DDF50F06EE1213342C21FFFBECD5CDF706EA0409231D0C110D11F7E1D3EE13F10F0F1C1007150DF6E4EBF906CDE303132E20191106FCE30511F412D40833232311FCE8F8EA0C163117F6060A272C03F8F9F8F921193D15F4FCFF130C03061311111C2D283207040403FD0F1408201D16021F08EEF5F9ED030D070D0913210A15120B0DFDFF110A060400190B110FEEFEF8EEF1F60A1003040006080A0AF9E3EDEEE0E2FAF8E7E1EBD8FCF407F6F7F90702F3E2F201DBDA190B08F2F1EDF70C13D0ECEBE4EDF6FCFAE2FAFEF9EDFDE4EFF7E6FCF9F7F6FE152108F4FCF1E6EBFC07EDE6E1F51B01E6E9ECCFE9EE100F02ECC20D00E1C5C9D1D0E1FC0B120313EAE1F4BEC7C7E8F6F30D0D0E1827EF02122203181213181918FE0C0B0424203A3C302C251201FBDFE82EF91F241E31291512F5F6E5E805F6F72216241E1015FEF6D7D2DE07F5131B04FFFBFEF9FBDCE6D7E015F6F8ECE7E1D0DADABDDDE8DED9FE0501D9B0E8AEE4D7F5B8D9D3CC010008FE0902FE01FD0904FFF502FF0604F9F4F7F0F2F6F5F0FEE4FF06000209FE12F4E900E0E6F4F0FE0AFCF909000404FEFEFAFBFCF3F7FD04F7FB0319070301FD020808FF02F7F508FB0C00F9FFFC1312050B0D000A041A19F6F3F108FEFD1014F4FF0108040B01EFF8F90BF903F3F5F80AF4F50BF30E0D0BF6FCFA01F50D060008F60B0B1A0DEE00F0030506FA0501FB090609F8EFF7FCFC0A04F9F30506140A03FEEE0F0FF804F902FB020CF6F404E605FC0003F3F6060208F0F3E805FFFBFCFD04070A0401F4F8F8F806FE07FBF607FAFCF3F5F4F4FDFAFA1D04FC02F9030605FFF6141A1D17131A0A08F2F7FFFCFB020B1213061C171BFDF208F401160E15191F21130C08EAE6FA0A07FD161A2725312D23F4E5F6F4F7FBFF1931331C1009D6DADAF6FBFBF3FBF102F7F3DBBCC7C0EC11FDF5FBF2F5E3BBC0D2D6CEE1231B1104000609DBBEE6EFE9FF172D0F13050404EAE0EE00FA151F362911FCFC120D01F406F3F7062C1D0500FFF604F0FD10030AFCFF0E0502F6F5F5FB0005F8E2EF0F110700FD08F4FB0306EA01172606F105F7DEEE0E08F7F7D60E080E1205080EEBE8DCFF06D7F4FB02F20D090D0D000BFD110BF1EDEEE6F1F1040904FF12FDF0F90F0FF1C7EF000106191208F2ED09EDFBDBD0DCEDE8FC010BF7030501E1DBD2D4D8E903F2F4FBEDE01303E4E1CBCFDBF8FFF1E4EDCFDF1E02DFFAE6E4ED0B01EDF0EEF6EB01F6FBF7F500FFFE0605F3FA0CFB09F9D6EAF80102F7EE0C13100EEDFDF9F90C07F8F5D3F808231402080907FF06C0D2C4C7C3D704FBE9E8F5030CDCB7BCBCDEACCDDBCAD7D1E9FD02F0F2110F03E506F0D0DD1E19F4ECD512020E13080113F4E3F8FFFACE05F9F7FFFFFF0206FB18EC0CF7F5F0F0D7E7F00201030715F5F3FF0F13D8C3D5FCEB0B100D10F7E30BEFF1CEB5D1ECF0FF111114060AFDD6CBA7BDC1E5F7FA03FDE1D82609D9D6C1A8B9030DFFEAF2D6DF1009ECEBE6DEF3FE0107F0E6E8DC0E07FCFC04F808F8F6F9EBEEFEF6FFFFD8FB110405FDEFF4FD15FE01F800E3120105ECD3F404230CF908F1F8F801ADC1AFC8B0D3F1F2F7FC04FDF8EDBD9CB1D2ADC9E1DEDCD5FFF1F3FF08F2F20400FAEE02F70101F6FC0A02FB02FB0812060A0BFCFDFCF8FBFA070F070AF8E7E4F5FA06F4FA1717121904FAE2E6D7D4F103070A151211081B1F1CFBCEDCDDF2060E030A213339351B1302D7F4FAF10104080E053A1E1612FF00F0F9011003F202F912F5F7EEFA0701F5050A1E0AF7FDF7E50EF3E3D4D003FC0E0C131820181D08EDDCD9E4FA080E191C161506051AF8E9C9ECF8F70D291F29412F2C2A17FAEB0205F5F4052A39443A302214FDF9FAF3F9F400F9F9F6F7FBF5F003FFF3FCF4F2F30603FA0006F4F1EFEFF8EFF7FA08FAF903F406F10008F3FBF0F0F9F401F402FC04FC03F6F8F6F6F7F2F3FFFCFAFCEFEEE4EAFEFDFCF308FEF1FC1302DBE1E8FAFBF5F9F400FCFF1304FCF4E3E9F105FEFC03F508140E0DEDE7E9F600F8FEEFF90508151D17F7FEF8020F050608EFF10A1D272D2604F6F5F3F5ECF9FD02FA111C1D1B14F7ECF2F9F3F9F60406F30006110CE2F4F4F0F303F603FFF10F09EEF1F3FFFDF307010408F9F3EAFAFAE901FBF8FEFE01FEFCF1F805F4F0FFF2EEF4F4FE0401EEFEF5F5FDF6FDF7F304F5F8F3F00605F205F9FBFAFFF2FB06EEF2F1F1F8F4F901F9EDE6E2E9F9F3F605FDF4FA0D05E9DFD5EBDDF7FEF5FCFD02080C0919151205E9F4F1F0FBFD121D2E2B2AFB18051C07EDEF05F10B182319F2FD19111518F6F5EEF9F50316F2E6EF011304E3F50203EEF30AF6F5F507F5E1E5DBF408F3EEE0F4FBF102EF0BF0EBEDEFFCF2EBEBE9EBFFF40E0FFD04FB05EF05F8F6F0FFF0F619010AFDEEEFF8F102EEFCF9EF070AF007FFF5F505F507FBFAF2FA01FF04F5F5FAFDFA0304F8EEE1D3DECFD3DEF2FB0C0403F00717092B35290EFAD0C5DC09F3040420161015241418FEEBB7EFFB101C28122322FD0AF6F7F0E9DED5071809070F0BF1F2FBF0EEEAB8BB0DFAFDF0ECEF0102F50AFAD7B4C4E5FFD5DCE1F0121D201EFDC6D815F0CCDBF4F40E252A1518EAABD7121909F502070E1C0F0604E1F4B6FD1930120E1826181005F502E4C4F60D2B211909020C02FEE900F0BAF50709060F09FE08FFF2F8E9DDCD0A262F240D17FEFE060EF2FAE8E608E1D001F90B14EC0A0A01FDDF02FE0206FBF7F7FDFDFF03F8FBFEFCFA1E160B00DCEF0DD7C2D4D1EBF1F9020B110812171D07F800DBC9FCFC190F1C091511101311F9E1D7F8EF14150805FB0801FFFBF2D5E3F2F303F4EBFB0612F4FE00E9F1DDF3E9FAE3E0F00609FF09120003DFF900FDD2E1F20B0D0A151008FBBAF40502E8D8E8F1F80F160E06EEFDF2FF0B1206EEFC11050B0EFBDEF7F3EE1F10140AFAFEFC03FCE9F0E2F6FA0F18120A060CF90105F8EDD1FC0718040E140FFC09F10601FCFC02F9F81420331D140B14191AEEEAFBFDF8F7D9E2EFEFD9F6E6BFB9E6FCE6EF0315F0FAEF0E10F2ECEBCCDE02191910FD18030E00E2EFE4F7D7F81D151110081204020AF601D7B2FA211805F8F90A22211D1AF5C0ACC504FFF5F90722221C251AFED3B7CC02E6E3D7FD1D13201A00F8D8D4FAF6C8D2D3FB081112090803EAB80D13D6CBDADE08F11C0A0401D8D10B13FDF6F306FE14FD15030EE1C2FC121E0BFE00070F051300FCDFACF9FE0E0C0813FC10090AEBE6F2D127182D130E1C1B0102FEEEEEF5E604E3EF130A220504F60E12E7CDE601FDEFFFEFFEFCFFFCF9F6FAF3F2FD00F6F20700FB0FF6E602E9E3EE0203110A0A190F07DBE1D5D9E6DA0B03201022240907F1FAE1EAFEDFF71B1C25272A221E170E09E9E8CCF21015332F2F242134281A00E3F4DF1122220B0C24202A3310E8D3F1EB0BE7D6EEE90A211E0EDEDCCA0301E9E7F0EEF8141206F5D5D3F5D4FAFCF9FDF01D18FB01FBE1F7DCCF060017141C07081E040605EFE6CC05FC0501061A1216FD09EFFFF8F9FF12120E1F1417191B061012F5EA11F4112206160500110FFD00ECF402FBF5E0DBDEF9E7BBDBCABFF0EE03F7FE1110ECFAF2FAF4FED6B2F8FF0E2204F3FFE0DAF4EBF3ECFBDDF40FF8FBF5DCE7FBF2F301EF02C7021B1606F1ECEA08181A0D13E9CAEF0F15EEF1020A2B1D181C0EBEFCED15FCF20405071B080A00F2E8B0E4FFE6B4BABAD7F1ECDAE4F505AD0CEAE4B597A8B7D9D6FEFE1D11D6FBFEE2F1BDB6B9D0FC12FA19FFAEF908F2DDD9D5E60A04151400F9C9FFFB02F8D8F409150F14090AEADBF72AF40FF70C1C2E2D0B1AF7F2F20BE8FB13E9FCFBE0FC22DBC9F902EFF2FDFEF7F5F102F6F0F1F0F8F0F8FCF4FAF4F1F2F1F2EF03F4FCFF0802FD00FD03F5D4F3E5FBFCFEF50007F00702F7F4F3FCFAF9EDFEFDF40407FC01FBFA0E0EF9F6FCFEF806071211200AF5F8F50D06E608FCF4F30C1C0502FBF4F8FAF6F5F6F6F80AFE09F2E9EC0BF3F1FBFC05F201ECF0F4DAE5F303ECF6F80602EEFDF4E7D9D4E3DD0102040504FCF400F4E5F6E1DEEC1308FA000AFDEFFA0AFB07F6F706FC070A09F4F8FDF506FC020508F7F9FCF1090702F5F0010400FF05FA0CFAFFF2F6F0030506FD03F6F8F2EEF801F0FB03FDFB0002FDFFFE00FCF4FBF6F0F004010407FCF92824360BF5F70302F5030BFE0A183E3B1AE2E1F3F300FA0108FB1713212703DFC6C1FAF3FEF80E0C22291DFEE2C5C7E8FBFD04000B0719100E1EFDF701EEF400F0F9FDF1101C2337210F1106FBFA05F3FBE6102A48584629F9D9F5EE07F7F2EBFD2550562A14E6D6D500F6FCFF01061327320DDEC1DFE7FDFBF8FAFB091005FDE6EBDEE9F9F4F3F0FBF70C05F4EDE3F0EDFB0DFAFEFF010D0C110506EFFE1704EFF1F7F303FEE0E5F4EAE8E4EFCCBFEEEEFBF5171103080109090007FAB1DFFF12F50412020FFE0AFC010F03D205D90006F6EE020709100F07FED2ECF2FCE4B3BFCCE3F900FF0CF0BDF7E7F3B6BD9FBFEAF8EBF4DBEDF5F4E703DED5BAC4F000FCE8D5DBFEFB192C01FCF7E2F5FC1404FAFCBD001D18171EF8020D0F100F1005CBF9091C0D00F2EDFE060E0B0C0BCB042E160FF4F3E0F9F600F7FBFBC4FF050D0209EAE3DBE4F7EEDFFCBBF80DF61A09F9C9D4D3F9F0EBF3F1F60BE8C1CCB6DAE2CDF903DDC0FBFE0708D4D6FCEDE1E7E7C8BEE2F9F0EA250F0A0200001316FDEBA5DE030BF918120613080E011401F6D9F7F4F00600E4FE050EF90209F0CD00E7E7DAA8A2CAF0FF03F6FBF8BAF3F8FEADADA1ADDCEFF5E3EFFDE3F3EEECC1C0C6B1EAE7F1E5D1D5F2FF2E0DFAF6D6BEEBFB040EFDFACBFB211A09FBEDD6F8060D060603C2F6F421FFF6F5EDF70505130311CB01330BFA00ECC8ECF102F50709B4EF1B0001EED1C1D1EDEBF2FA01CAFB08FC07F7D5CCDDE3F105EFF8EEFCFCE0A1B2C0EAD9D5FD0AE2C904F8F608F1E5D4F6EEF0ECF1F20009FEF4F9F5E2E0F4FCF712170F050D07EEF8FAF3ECEBED09F9111C0BF0FD050BF301E9E5D4F50920221A1FFA00F6EEF5F1F1D2F10B1D0B04F1FAFF050E191001E4FDFB0AFD01F009F10CFC08FC140E0F17131507F80A13030A030109FF1EFB170F02FDF800EF01F5EE171704F90907F0EE0A160C09F4E9EEFFFCEA0A0C02F200F6030707EFE7E8C9B9ED07F403FCF6F5F7EFF3E3F0DFE3F91404FE080211F0F1FAE802F7F702FF00F407FB0BFAF6FA060F06FC0E0BFF00050201FF0709F8040501F3F307F7F40A040603FF0E140F08FF050C07F9FBFC0301090F020FF703FEF8FAF8040805031101FB0B000501020AF7070BF7FCF2F8F2EDE302FC06F3FB04F7FCE7E10815DEDF0E07F4F6FFFCFBF2E7DC0415DFDDF6020206FDFEFBDFE7F90B0CD1E9F502F601FDF306F0E7FB07F2F6F0FA00FEF6FAF2FFFEF903F5FA0702F405010DF8F501FA0E0AFA08F1FA07F700F4F30A02090A0A020B04FD0BFB0CF9060702FCF3FB18120204F9F7FEF604020BF800FFFE0EF9FFFC00FBF4FA01FF0900F9F5F70000FB020805F5FCF6070908FFFEFB0C060A07070201FDFE0C080D0105F3F80CF804FAFD090307030B17FCFC06FEFEFA07FB040CFE030A11F7E50802F90C02FE02FEFD090E180AF6FCFCFC06F6F7FFEDF5EB14F9E9EF07FB06FCFE03FDE5FBEC0AFBF20203F9F600FE04FEF0F903EF0AF70F1105F907F50101F4150BFFF9F803060105FBFCFB01031708FF0EF3FC03FC08F5FE01FD0A14070DF801021207FBFD0406F8FF0B1202140DFE080A06050B09FF0DF40A0414FA11F3F7F4F607FCEDD0D6BAD9BAD8D9D7EDFCFBEADADFC0BCDFC9C5C9EEC4DAE4F4F102FBF309FF04EDE8DEDE050FF8EB0505F8F6EECAC2B7BCD6FAFEF0EDDC0CEAE7D3C4C5C4C5E2E9090BF9E6F4E2FAD8D5E4D1CAE6F2EFD6CCF2FFFD0BFE02E0E3F606F6F1E4D6F31B140912190CED00090CE4EF1AE7140C080408FD0B0F0605F5EFFEF8FEFCF3F7F2F309030BFDE4D7CEF5E103E5DBDAF1FB0400EAE1DCFECED4DED0CFD0EAEDF40909F3E10CD3E4F2FFEFF0F3F613FB01D4ED02DD00EBC5F5D7E3D8F6CCEDF0EFF405030A050802FB0BFAF7FEF60CF3FDDDD7E2F4F60CFA1F020BDD06F2F7FAF4F40A0216181A1B1DFCFF0AF4EEF1F5FDDDE3D3FBF11B13040AF700EFF0E1B9DFDBE2E4030D0E07DDF1F600EFC7DAF5E5DEF8E605FBFDF5F7F5E6DE0002F0F2F2E5F30C000B15FB001907F711240300FD0B180E0C0A190C141C0A14FFF8F20EEA03060404040D1113110908F209E4FAFFF1F6F5FB13050BF9D3FFEFF5E8F9F6DAEAFBFA0701FBF4F4FEECDAEAF8E3DFE6E9000BFDF807FA0607F0F0EBF2E601E1DDFD01060BF7E2D2B1CAC4E3BFC7AFCCD9DFE7CB14CFEFD4E80B020912222B0AEAE9F8FFEDDEE9F7F605180A1307D7F7F9E1E4E6E1EAF60A2F1DFA13EDEF01F7E6FBF0DCF1F5F603F5F7FBF1E3F90405F4E2FBF7F3EDE1D9E4D303171513FEE9F3F6F5F6ECD5DD110A2215F9EB00070D0EF7F2F3100D15230AF90404FD0C06E4F9D60BE8000209EFE9EEF3F0EEF707C8F8E1F1FEF6ECEBFCDEF7ECF1CFE3F1C9D9ECEBE3F5E7FCF8081405E3F9D606FAFFE3F4F7091E1502FBF007F9F0EACFF4E3FDEEFBD4E1F60004030D060D09FF02F8FDFEF606F7FAFEE0FCF6ECE8ED140EF6E2DDDF00EAFD0AEAFBE6DEECE4041628FDF4FFF2FADCCBC3D4BDE50525EF0EF900FEECD8D4D0E0C0D306180818E7F8E2C3E4EFF8D2B1E1FD04F4E205F1C6D7FD1514CEBFFE1F1CF3F1FAFCFA11081A1000021F18FEDF070E1313070B0907070C1A1402F6F8FD09111807FE06FD0C060B0307F3000C050F10F2F5F4F2EEF9E2EAE806FCFBEAEAEEDAF0EAF5FD18EFFC00F6EAFFF6F8EAF2F50B06FB0008F7040DF0EFE3FBE8F0DCE1FD050DFB03ECF1D3CDC6DDD3DCBBD0D1EA06EF06CCCFD0E0FCFCFD0D1703F50CD4FE0303150D2D29232B1623F8F4D6FC040104081727402D31071ADCD5E1E1002121213531261F06F8DAE9E7EE15243306281F230FF7D8E7E1F01C251B1FEA0B0D0EFCD9EDEFBF041014ECE2E60C0803FDDDED02FEF80707E6E2FD01040101EEF5FFF704FAF4ECF20106F1FDEFE9D9E7ED01060E171108FEDBD8E4E9DFFFD2EFFE0C1611FCE5E1F107E0F2FBDACD00040DFCFAEBF5F4EFEEEBF8ECD1DFF9EFE6F4FDCFD7D6FFF70BF604020BF400FFF3070CF8040B00FDFEFFFCF5FFFD0E05050808FBF9FAFA02FB131116161519060607F904ED0621191D2C26211310F9FC0C07F517151D0E1513270D0703FFFDFD0303051E1B0AF80D100DF0F1FA0DF8EAF305F7E5EF02011102F90AFCF8F1F9F4FCEDF61E0FFEF9040B08FCFFFFF7F6EE080E0F01FCFD070A0D0AF906031012F8FBFF03F0FD03011418F80BF91300FBFD09F909FCFCF3FF0AF908FA0C080606FAF9FDF6F4F604FB0406FCF905F701FE05F708FCFB0DF703FBF8FA03F307090808F9FE0A0802F805F707F9F50C0AF60C07FA06FAFAF50508F4F6FF00F8F60A01EEF0EDF4F406030B0BFC0504EBD8BEC1D1DEF0FBF60CFB07F2E3DBB9A3BAB1CEF50BFDF7FCE8E5D1D7C5CDE1CAD3F0080109F2EBEDE7DDDDCFEBFAF0F8000BF4E9FD10FD0F16E1E71D06FFFEF60917080401FF030BE6F5F901FB08FE09FB0BF4F6E8F3020CFA0EF3F400FB0E1805E0F903051314F7F9010D05F0FDE3E7DF1313181313F60AFB0000F6F9F705070B0B0A02FFF902F9F9EC07FCFC0401EFF90100F808F6DDE8CBCAD9E3CAC9B4D1CFEDFEECF5D5D5DDEEF3F8F00C0E1CF9FFD507F51A130E0C0803120AFEF6FB0AFC181727230D031204100715FAECF6192A2613FD030D0802E3F800FBEF0F2A2821FA090E09FED7D803FFE3100F0F100F1E1500FCEAF606F7EC040E14051207100409F7DEFDF8EFE8FFFA080AF40908F902E207DBDEDBDCF1FE03F40606F9E7CBF6EBD4C4BFE7FC000610030EEBDA0AFEE2D1F80D171726171700FDE60900F60310161E151E0FF2F3FFEA0508F3FBE907F401FAEFC7CFFFF4FFFAE1D6B9D2D0D3BDC6B4BDD2EEFDDEF1DCDDDBEBEE07EA141A06F1F9D708060507FC0B1909031316F7F9EF0F0F3A373D2616090F041B1104F4FB193D2B332D191E0F04FC02FDFBE81E29332D10231E03F9E4D4080BE81F23181D0F1F140F10ECEAF5F2F10E16120D0406140403EDF407EAEDD203EE07EF05FC0C07FDD10DDFE7CFD1E8F80102EFFDFBDDBF0DE7D4B2D1EE040B0E03F9FEE1CCFEF2E3C50713221014130E0DF1D30200E4EE21221C1717FFF308EBEEFF00EAEDE6F6EBF4F8E9BBD8E7F2F7F5FA04FBFDFAF3030AFB040CF7FAFFEDEDF70A02111B07F8F50B03FD05F1000AFF04120718091310FD05E5F0FFFAFC09190D29412E28FE07E1F2E5D6ECF80C17293827370505EBEEDDE2F4F507F4070610220A0BEFDFDAE0F7F70A04FDF00113F2F6F5FCF9E3D9EBF3EBEFEBF2F201FF192C2E20110003F4EEE2EDE8F90E03151B2E1E1F1603F3F0F5EAFE0A070B2730210A111A0803FEE6FA0A0012152B1B19111004FE01F4F3F6F8E8F1FE24362F2A230810F4010703020603F907000508F404070300FBF908F6F4030809FDF80AF806F4FD05F904FDFFFCFEFD0B040209FC02040B02F2080209FD01F5FBFAF50CF8FC06F2E5FB1AFEFA00EE0208000708FCF7FF312F241708FBF502F60400F0EDF61A2F281D0FF602040B0C0A01E5052C3A1F271308F8F6FB082B20190C1B1919030AF70B0D0B0822302E11231C0CF7FCFEFDF5FCFD062C28101B0C02FD0802F50202F20212140E0401FE0B02F8000A08040F04F70CF8FDF6F304FD0CF6F5050401FEF6F805F3FE03FE0103FCFB0209FEF3F50AFFFFFF0D01F604F5FA06F5F7F70DFB03FBFCFB05F7FBF9FCF8FFF5FAF508FBF905FC04F90CF301020A191409040607F90303EFF0EFEE0F2F31361915FB070902E7E4D5DEFD1D33340B0807FA0108E6DFE2EBF6FC06010814030B0307FA03EDEFFEF8F2ECFA060D07FC1213FB0B190CE9DEEEFE0107FE040BFC05151A03E5EFEEEEF6F90AFD0C09FA021708FFE6F7FEFAF8F5070E07FDFCFD061201060203F5F6F5FB00EFF20CFB08FEFDF3030DFBF6F601FAFAF80AFEF5FBFA05080CFFF80806FD05F60AFD040407040606E4CEF1DFE1D6EEE4E3F1FA00F1D6E5CFE7E1B7C4FCFF05E6F1F9E7C3E9E1FCF3F3F5F8EEF90108F2FEBDF403FF0FF8080202FFFE1612E8BCCEFA070AF9131E171AFD0517E5D5E5F40C0703212A2E1B161D21E0CDF81C10FDFB191C12FEF70D1CE3D00022120C08140AF7F7FADDECC30E0C0E1F241E03F703E9EBFCF9F70D181E1B0DF2FEF4FC07F60FE0C4F9FF021111FE08FEFF06FF0DF2D2ECFCFD0D0D08030703FF0D0DFCFEF0040012231E0D1300FAF0100503E6CCB7E007F800F6F8EAFA2B0304080505F507F5FAFCFE0703030C05F7E9DEFCF2F9FB17EF040FEF0911DA04E8FDEADCEBECFC1418F7FCFECEF1F20905ECFAF1F9F90A1F06F4DDFF020F1AF605091222191513E0EAECF91414070A120E19123214F1E3EAFD0FFF0C110B0B020018FBEDE1EC08100F14071003FBEFDD03E6F2F7FAF6FDFBEC00FAECF8F0FBFF0418020203EEF3E503F0F4F8F60905030D0708FDE9F5F3F503F705D2F5FD0A1F131C04F504F6160FFCF00408071A090D0603FDF0FF0705F9F3E3E7F60915121509011B2A0701F4EAC7D4DED3B8FA0EEDDDD7F5EA0CD6C6D2DEF8F4011C05ED0513CFE5C7CDF4EAD9FA020009FC0B1804B5E1E5ECDCF7ECF1F3F90C2003C7A3F1EFF8FB03E8EFECE2FB1D29E2E9EEE7F6FDF8F8E2ECD2043217D6CFE4EFEEF7F3EEECDEC4E81D19CBEBDEDEF0060EFAF2E8E7F3EAFBCDE6F0F8EFFB0B02E4EEF613F4E8F6FC16F4F10600F9F71208F8EED8F3F4121606FCFD1706120D0BF5CACA02DFFC0C12111D1E0F072CFEECE0F00017FD140A09040004F9D90803F2DCDAF810FC08070BE9181CEFF502F3F300FAF3090900070606FF09F704F0E704F4E4F1201506FA03F502F3DBE3F8FC15182A22270BFE08EFD9C7CBE4ED0326333C231811FAC1D3CCDBD9EDF5202E2422180FFBD9D2DEE7EE07090FEE0812290FF5F5FEFDF904FA14EFDABFD9ED10EF04281A01FF1306DDC4CAD2F8FBE3FF1EFA041102E9D9DAE70005F4F60C2314F60400FAF5E3F5F4F7E6FF081B10100EF10401010811EEFEECFD14FEFE090A0D010503000907ED19FBFE2101151C140712061BFEFE02E8EDE51508010500090BEE0AF507F3F3D2EED2C7F506F7BFDFE200EBF2E0C1F4F9E517090AFFE80EF5F3D3E8FB02F0E7071716FCFE0D05D8D3FAF3F004EBE9F9F8F60E03E3CCE0E7F5F4EBCCBAADB0BEFC12DCA8E0F4F0F3E9D0998A93990216E8D5C8C8DDEBE7C6B19EB4AFD00EEDBCD7C2B2DEE6D0BFDAD2DB01F7FBC1D3C6B8D6E6E1DFE9F0F505E0070CFECFD6E3DBEDF50200060B09F2F0F1D3E9E8F204040E0E130CFCE4CB02FCF7F50DFF0A1121161803F40BE9D8EBFEF7100B1F171E18F0FB0AB3EAD3F40FEA01E70E03F4F404F9F402F5060BF8FBF6010B0C0908F601F6FFF90DFF070B0403FDFAF6F7FFFBEBF2E9F4101F1A0D06FEFA07FFF6DBF7F7F7F90D0BF9F9FDF5050AFF02EE02F8E8EAF1EDFE0808FFFBEBDFEBFCEBDDE7D1F0E6FEFEFF0DEDEFE40003E5D1D9DEFD0B09061800FCF51007E8E4F2FCF8020C0008F4EF070AF6FEF6FA07FCFFFCFE06EADAD6E9EEF30907060FFC0B020903EADEE5FBFB04F90C0615080501F9EEF8ED0702050A080701FCFC0C09FE0701FE02FA0C03010CFBFEFAF8080507020BFE04FC080B08FEF507060D0BF906F8FBFDFCF5FE07FCF70B070102F7F7070909FAFEFBF7F1E9F4F1F3030B091300FD0B07E6DFD8DFEF0F1D112209F80101EEF9EADFEFFB3233381F08FC00FEF1F8F0040A11384E5A3418EF0909FAF6FC0419244A514D38161302FEF80D242A28162833391F10FDFFFB091B24422A13191D060705F8FAFF040C0D352A201508FCF1F9F20DFD05180C1BFBF6E2EAD5D3EF03F60AFE0C0F1D09EBE1E4D7050B11FCF50D0D02100A01EBDDFAEBF915020608FAFE020B0300FF06080F0C030606FFB5E1D1BFC5FA12F9DADDF700E9D3D9D1F8FBF90602F7F8FF0F08FFCAF9F7FEF2F0EFF6F9E5F70AF702C4F9F305F3EBE8E1EEEDF808FED4EE101B1A0DF2CDE1CECDFF1600E506201F170B0802FBE8C9E119F8E5FA0E0A13091303FA09FCDA00F5E60E00F6FBEC090DFF090D02DC03DF0D04FEF2E9EE020F060D1AE809140D11FBF004F3F9020011150300F5FE01FBF6FAFCFD0AF4080E0C05040203EEECE1EEDDE5F3E7FCF1FDF2FFFBE8EFF1E9D2D4E5F2FD11FCFDE7DECCBFD6E6F2F1F3CC19EB08F5F2C3DDE0C3CCF215F3CAD9F903E4D5E4C9F9FAFBFC1512F8F0FDF7F7BBF2E4FFE9F3FD01F8E5F0110105BFED0CFEF8E9E5DAD9D909050ADAEF161E1B14DDB9C5BAB4F1080DEB0F2E24231902E7EBD5B7DE19FAE6F0F4F5040D16F60701D3D3F3F6DDFDF8EFF603020A0BFD00FBE9FFDB05F5E5DEF401FF0D03020BEC03FC0F05F3F3F4EFF9FD01FE170B0AF003F6F9E7F1F902FAFE1121F80C070202F7F6D9F6F7E7F50810FD05EDFFE8CDE0E3D9DFDCEBEAFAFFF9F8F9CCBAC7D7DFF0E8ECD713F002000703FF1A1F0A0F0D182400020BF910011C1810080F050A14F9FA08010AF2EDE8EFFC0DF8F5FA080CF405EAEAF3EEF2F0E7DFF1EBDDFAFEF6D9EEF9F7040D0F0C0D0200FAF8F3EDF603080B2E30240D13FD03F6E1F1F2FAF3F92C33181204FC04FBF5F5ECF0ECF5391E0C0501E7FEF801E2E0E2DCE6050E0607F9F6FC06F7DFC1DBEBE5E6FF0002F3F9F2F2F7E1C9D8D6EBFF101E1AF3060302F4F7EFEDDDEE0E0813FDF4F20409FDFFF402F803FC05FDF905F602F805FCFB000DFE08FAFA07F602FA02F9F9010BF803FF0B040EFB08F8FE070B020EF202FBFBF5F2FDFEF8FDF40101F9E5F8FEFCFCEFF80BF80A05FAFAF5F3DF011011140BF9FE05F7F8F6F8F3F1171A1B2204110A0A060205FCFFE70B282E120D04FA0A0601E7ECF8FB0330270CFFF506FA0707EBDCDDE5F3130DF50101F404FB06EFE9D0D7E7FDE6FBFFFDFCF9F70AF3ECE0E5E6DCF0FC0504000D03FB00E7D3F9DFF4F3F7F5F5F8FB0002060EF8FAFBFCFCF4FEF8FD070A0102030FFA01F8FE02060CFB050B01F6FBF5010705F7FF090B000305060000F9FF05F8F3040000070CF6FCFFFB02FCF20407F600060600F8F601F30505FFFAF6FFF3FF050700F803FE09110D140E1E0E030A090BFAF600120D1324291B1806FA08FC0902F003ED0924160FF8F4FCF70DFE04F3EBE7130DF3EEE2F6040C031002EFD9E3FFE4F3F3FC0901030C03FCE0D7E0E7F8FEFFFE05FB090E07F9E0C5E1D70F1FFE0CF90602F60DFFE8E3D6FD0C120408040D02F5F5FA050D0A000A0202F8000BFCFD00F906F605FDF6FC0D0708FE0605FCFCFBFAFB060704F408FEFBFCFC0F2E23200FF20F251E020307F81F1E291DFB0AFB0200052F061308EEF007DDD4DEEAEEFD061702FCEBDEE1E2CFC4CAEBF7FA0A101A0202CED8DFE6C7D9E0FF060B0DF5F1DCBEC3E1DBCAC9E1F50708F6DAD9FCB5DEE6E9DADFF3040A0D1A07E1F3ACDEE4F8F5F10415150A1009EAE5D6EF00F802F8FD181707FD12E8F9E6E8FD0624130B090800070A0AD8C7DFF6031F1D250D17FDF308F3FDCCA6C2F50D111E11F6FDEBDFF9FDF7CDB8C2DEF6F605FAF0DED6ED0AF2F8DED5C6EBC4D8E4D7E2F804060DF7F90A0D080A08FD0E0CF703EDF9111C1D0D22FF04271B0EF8FE04F70013FAF8EEF0E9FFF9FF0F0710F5EAFDEBE8D6D6EFF3F9F90911F7FBE500F0D7E1E5E6FE07FD0804F8E5FD0AF3D7DED2E9F90AEEAA00FDF50805FBF2EAED01050F1AECF5F0D207FB11F5F6161712130F0501F9C5FBFD0A12F117110D0200FFF6F9D2FD08091400FE0304FB06FEF6F4D9EEF507130D111A05FE010C06F2E4D5EDF5051019120907FDDBF606E5B8DCF4F001FC01FC04DED1FC0BFEDED0D0D2DCCBC4D2DBDDE8F3F506212B41112E191922223806E811E1061F1D2F1412000A0F14F8F3F4E2F00604EE07091B0808030B0CFAE8DFFC0208F7030B0DF6FAE7D4EBF4DFFC0403F2F5F0FFFBF4F5D7E6C0DDF6FFFDFCF8F5ECFAF6DEC8DFE4FB00F7FCFF0700EEEE2603E2E2C1E60207FDF3060E081A1508D5EDBDE2F201F30D120A0F221203D5ECC3DAFA0510FC0F17080903FD00CCE4E8EDF318160D1404090808FBEBC6A9FD090714FCFD0EEEEDE4EFF4E2CEBFCBF0F60602E5FFD8C8E204EFE3DACDD6E4C6C4D2CADEF6F20010F90301F9FEFB01FDFB0E00F700FFF8F5ED071C161A111A191207F7E903E5E7F0EEF90C09030D04FBF3E7EFE7E5E401F60C261309040EE2F2DCD2E8DDF71B160F12FFEFE6EDE8BEE3DAD9E91503FFF8C9C7EFE7FCDCEED6D3FE101B04E0EDFBE9F7FCD6D9CCD3041515FAF907F2E7F8E7ECD1C5D9E808120F0A0404F8E2DFF5E7E5DFF102161D0AFE080DF802FDF5FA0808121E060808080AFDF4D5F7010F1100FD110CFBE8EF07FBC6E3F5EAE9EDF10CFBD9E3F1F4EAF2E6E8DFCFC1D4D7F5E0F30A030A220B261928211210222A11F3F6F9031E3A262A2E291F101A34F7F6FA04161928170D0F131102FE12FCE40F07191D221610EEE8E7F4E3FDECF9021E11141CFCD3D7CFCBD2F0C0E90B1519171BF6DCC9CD0F00FBCFD827091830080AE7E7FD2000DEC9E90920232A1C09F7F9080DF90ADADA041420180B0D1B191313F4F9EEDAF6F4FD18052210F70FFAFBF5CCD3A7F2F70312040902090AE900D2CAE1E1E5DAE801EFFEE7CA0EF4D0BFCFF4D0E5D7E8FBDABFDDFA06F4DECFD8D0DCCFD6D7D3F2F5F401070B0900F6F6010108FF0DFB08F5F9F3030709092D0A0AFF000DFFF4FCF6080C1A180A0A010BF5FDF9F4FBFE0A0B0D161810FFFCF2F60102F501090608081A00E4EEF2000101FBFD05F9EB031D04E9DEE3E90AF8FAF103FAF30A04F7DBF3F3FFFCFA01F1FFFEF6170803FA0CFC02FE05FEFD1601FA0AF702000FFD0D0D0503040A01F3F8F10C160E09F8FC040B00040114060F06FA0C0F08FE09F9FB090310FB06FE010005EF09FBF9FBF2F7FAF2FAFBF30904F3F502F8FEF9080602FDF4FA0BFE0405F809FFF909F9F608F90502FCFD0B06FC0DFD05ECEDEAF1FFF8050609FA0B00FBEFCEBFC5C0E2EDFCF5FBFE0103FBDEDAC1CDE2FE020A0C09F50AEEE8C3B8C5D3092E37280403F8F4E3EDB793C7D30F3630F7F0FB04F5FEE7BA89CBE60F2024F8EF000CF6FFE0B994C801EB02EEF8FC0800F3F6F4CDBCE40002FDF4E9ECFF03F3EA0701E7E70715F200FD0600030707FE0A1C1406EFEE0111FFFF02FDF30D1E2623140102FAEB06F5FE00E6FC000AFA0AF7110BF00605FE060BF7FC03F8EFF800F7FC0002F9FA110D2D0B1D1F0E0D2D34FBEB0BEE150710120209040919111EF3FDE709020A0DF5F8EDF0FAFF200D05F0020DFF01EBC9D4D7E6F2DE04FCE1010C06F70BF1CCC2DEF2E9CFFBEB0E0C0B0AF004E7EEF30310F008F10515FEFCFCF5080500141CFB02E3D41E09041D0E12FD130F181708E4F31A0C031F1B221C11090E1AFCF6F21016111610140C1109FB120EEDF9E708141C090104FCECE90AFE07DCD904FFFFFBEED5E6F0E4EDFDF5F9ECD5F6F1CEE8E3DBDFCDE202FF05F6DED4E1CCC3D9D2D5ECEFFC070D282E16201E1B212036FDFA00F11820181F1A1A07090E1F1BFC00F0FF1C1319F4F1FCF0F4061305FCEAFE180B0EF7DFDCCDE0E0F5FF06E90D1B180D13F1C8BCDAEBD9D2F6DF131D220305F4CDC6DDEC0DE50BDF0619110909F2F3F0FA0C1A000DE5D12C0F16221305FC0D1807200DECF81C190C2213110C090C052800E3F01A15200411080C1101102007DEE8EB08141910FBF0FAEDF7F4FCF8CFC4F801EEF7E8EBEDF2D6E409F9F0E7CBD6EFDBECDDE4DCD2DA0004F7EECCDEEFD6CDDCDEEAF0F9F70308F7FE0408FD00060B060306F7FDF9F3E4E0EBE7E6CB03FA0DFDF9040206070B0C01FCEEEEFCEA020F0912050C1A1B121A0C140E0004040F1F171101060B1C110F19FCFD0A1F1E11FBE0C7EB10FBFDFBEE13041B14EEE0F7D5F3F803120B0314FE07FE041A18F9F70B331F03EAF50FF1E9EB2B07FF03041D18030700FCF1F500F7E401DFE2FF0E080CFE00F70300FEF8EAE3D7D6F50308F70800130CFCEFD8D2BAA9ECF7090B0812F4F609E4EACDCAE0F60DFA04FD0F0F020A0407FDFAFD0DFCFF06FC000B0308080603FA10FE020E01FC0103FDF900FB070EFB04FB0F0506080502130A090B081703120E02FCFD0B1310FE0CF6F6060D01FCFB1102FF0109061602F40F0B06110D0610F9090F1314FAD7F4F7FD1001FD08000A181D1BF0D6F3FF03FFFF0D0601FF262D1208EBE40E0A0B1008FD02000E0E1910FDFA0501FF0F0C0FFF0F1117161C0AF60D11FDF9050CFF0F0C0112F80EFD120C110212070905FA1409FF0201FBFE03FE0BFF0AF600090F0A0BFC10FF0B03FA100313F90607FA070101FB05FD0F0212120EFCFE0DFF0703FEFA0E02FB0A110504000DFFFF0C04010FFA0E080D020A0C020B0204FF0FFE05080808EF05070503FF060304070E0BF0F8E9F40E03E4F0F80EFFFB0DF8EA06F516110AF8F0FE010D0D100D05FA22312220FEF7FCFD080D0E15121B33452001F710F9F60BFF00FD0F2A351A0AEBF5120FF5F6FF02040E0F181D07EFF70819FDFCFE13080413230403FBFDF81203FD0C0804FB120D0604E4F6FB100B0605FB02060A090AF7FB0805FD050FFF10FB0B0E1116FD0E070CFD0E0501F9F9F0D1DECEE5DDF1DDE8ECFB0905EBD2ACBED2C1D9CACCD2E4E1F502DD131AFD1307EAF2E5DCBFD7EF110D3314241A0A0BF8F2E3E8BCD22429172C30150B0409F9E4E1ECD522051D1A0F08F50600F4F806F2EE362215FFFEEBE3EAF0FC0901E4EE1713FADDDEDBC1E4F51304F1DEE6E701E3E1E8D7D6E8F8100FF7F5C917E0FCD7E2DCD9F3071007FAF7F4D9D6DBDDD8DCE1F8E4EBFBCAD6CEDEF4F5D8DADCEBEAFDE2E7D3CBF3FF161C0FEEECF609F7EEE9D7C0F100DD0AFB1AFC130412121E08DA0301FA050B100B0B050C0A0B0F01FA01F5DBC3ADEBBCA0A3BAFFDBFB0D01FDFCF5F905E6D2DCD3E9ADDBFB1EF5263410251005F6F6E4DDE0FA1E0C0B051103090D05FAE0DFDFFE1420121613070C1B11F4F8E800051015110403F7EB03FFFE0600F012142714FFF3DAD8EE0A1402EFF506FA08E9FCE7DBE4DF071E06FCD9FDF6F6EADFE7F203F30008FEF2F40105FDEDE8EBE9FBE6E8EDF0E9EAF8E902FCE6E6E4E7F7F4EDE4DDD311EE181907EBD8F8F9E4D1E4CDCBFAF42D1101051204F90E07F8F3FC040B05F7E9E6CFD6E0CFE5CBE2EFF602E4F1BC97A1BCDCD180CAEACBE6F2FE0307EDDFEBFAEEFEE6FDCCB324F2EF0B0EF5EEE9FAEEF3E3FDBD230506FF0AFDE2E2F0FC1410E3F3181C170408F2DADCFD18F9F5F20411271B03EDF2DEF700FD17EA0302311E07EB09E7D9F1070FF3EFEEE5E811E9E9E5E6F1EF09090A0BE9E2160CE7FCEFDDF9F1F2F601E8EED5D6DEFDE7F3FA06F5F2F6EEDFCCEBD9FA0209E9F5F4F9DACFD0E2CDCCED1E13060800F900FB00F0F3BEDCFAF2050D160310FB04F91006E90B07070D1411121110061013FB090908F0ECE9F1E8F1D9D9D5D1DDE5F1F600F7FCF60300F4EBEEDADDC3DCFE02080009040D0401ECF3F6E3DF1B0EEF050E04FF0A0BEEF402F3F80C03040207050AF517F41201E6FA101F13172226E5D10C0C0BFEFB0D1116121A290DC6C7F90C100F0CF10002080C25FCCFCFFA0F0FF700F60AFB1A0B00F3E2F7FF072213FEFF10FFFDE7F4F0E8DDE9E3F6E7F1F8FAEFF5F1F4E5E5E6E9EAE9F5F7FBEEFE1902FDF4EE04F7E2EFE9D2FCF515F1FF0D0CF50D00050C190B0701F8F601DFCCDCE9E9EDE9E2E30201F9F4BCC2B9ADC7CA9C93F4CEEDFB06EDDCC7D0E1D6F6E4E2D9C7D0F7F8EAD4DBD4E3DBF4100DFCFADF2BEDDDDBBBCCD6DF0C15011BEEE92818F4E2C8D6D6E015170C11D2E719170900EC05CAF3101314F5CAEC1E3618142222D8010715FE150BAE011204273918E8020E0B13FFECCD04D60AF800161312040115F0C9DDF901FC021C121A04FAFFF3C3D5ECE5CE044028140C07FBF8DCDAC6DA05DF282C1918130E0A040A01E4FA0914120C1E1B120A29010926F9010F020D0DFD0E0D0E000505F90F0310FDFE0C0405F80A0BFD0A0F020FFD0DFAEFFBF5FBFFFD04F7090AF90702FAF0FAE7ECEFEF02011309F7010DF2E2E9EEF9E9E105F2FEFD04FEF6F8F4FA1408050D030C0CF9FDFE05EE061425210A12FD080905FD0C0E0C0F222C05F3FB010418FDFEFC04FD19391AF7E3FE100411FFF7FD0304101E1CF6090003FD09F41007FDFF0F0C09060500FB00FFF6FD0F0EF30006FE060A01040206F60210FA04020B0201FFF50A04FB06F7FDFF000015020D07060303010DF8FC0AFB11FBFEFC100DFE020D010CF80CFE000DFC0711FD0E0CF803FB01060801080D0E130E171603FA0FFDFC181D1F272B23FAF01004060E06F30E292F261908F2CDDAFBFDFF02040F20220100F6DFC7D30100120F1CF70D15ECFE1404E7EA080D0914130BFC0FECB1FA0D13F0091B0BFE0801070CE3CAD3F1F8F3F7FE07F80F06F5FEEFE1C2E9FDEC0A04FE030B0500F2CAD6D2EFFAF9FF0B0D0907F7E3DAD5CE0100F7FEFC0B09FA130DF2E8E3EBF90FEAF9F60802100EFF05F8FBF805F60D0310FBF8050402EAE8D2CFDED1E8D1D4E6EF14F3EAB4989DD5DFDE9BD9ECCEE21123F7FC08FC0CF505F6F6DCBABD07171A222730150C03060006F7CFFBFE15271F1608EB060CFEFEEEF20F05F204F700F6E9F9F902FFE3C5110CEFEDD4F0EEF20509FB09EEE30DF2D4D8EAD5EDE2F70E0E0F04C102F1D6D8F7ECEDF9FE1211FFF4E009FDE0E8F9F2F8F1FA00F8EDE5C10BEBDCD4E6E5000405FCF3E0C9D804DFEACFE60F0A0AFFFB05F3B6E4FFFE05FB11061D131B030204CEE518001CFE1701041F1BFD0F17FE0212F402F3D7D3DADED9D8CFD1F4FD12F1DEBE999BDAE2D488EAE0C1E90825FDFB0AFDFDF800E6E1DBA8BF0C281321211A0CFAF008FFF2E9D70408011B0F1AF4EE02020C0AFCDD0B03F5EEDBE1E8F2020706FEEDCC1604E1DCD4E5F8EE0F05F9FDDED201F7E1E2DBE6FBF1F70B1117F1C005E7EBE2FEF9DEFAF91508FEF1D80E13E9F1F7F2FE06FBF8F5E7CCD105F9D1DDE6FC0606000101E0CCE006CED1FB0B122610141201EDB7EA07E90B1C2F162824170B0F08B9E30CFF0E0A071707260FFA1616EDF90501FAF4FEF9EBE9F9F1FDF503F2F7F3F30804F60101F5EBF5F8F0FBFBF7020F070A0A13FD06FAF910F6FA03F00506FC0B100703FF040A07F001E70CFF0B0A06F6021001FDF900F6F9FDEDE0F2E414202113F804F103EAEFE7E6E4C3061A1EEFCDF4F2F20CF9F907ECE803F8DC010000FBEEF0EFFD0103DCF0ECE5F8EFF2F2DDE3EEF9E1EACFF2E6DDFBD8EFF6EFF5F1E2D8FCF2F7F2EDE1EB04F1EEF8D0EDF7F7131C08F1E100060603E9F1DAFCEA000700E5F0F00501F1F6F6FEF4EEFFFD00ECF9FCE9F6F1EFF0F000F1EDFFECEFF5FAF1EAEAF7F8FEF9EF0705F002F6F501ECFDF8F4FAFAF0EFEFEFF103F5F603EEFEEAF101F2D5EDE6FBF9EDEEEAF6F0E6EBF3F5E6D6DCF1F3F0FD00EAF8F7DBE4E5DADBD7E5E5FAFBECF8F2F6DDF3E2B6D5FAF2E9E8ECF4F2FAEFE5C6BDD6ED02F703F6EEF302FAF1CCADC0CFED0608FE00F9ECF5E9D7D6BBBED0E8F9EBEEF9FBF5FFF0DFCFB5C4BEE2ECF4FDEEEEFD01F2E9EAE0E1D6F7F7F2F4F3FCFC01F0FD00E8EAF6E401ECF3F2F9FDF0E9FAEAFEF4F8EDE9F6EBF902FFEBF0ECF9ECFFEEEAF9FEEBEBEAEFF80000EFFDF6F9F0F401EFFAFBE902FAF7FAFF0802FFF7F2FF04FAFCEAF5F7FAFDFBF3E4F0F4EEECF500EBF7FAE5CBE2E5F114F0F4ECE8FCFBE6EFCAD1D2DF062300F5EEEFFAFAE9EBCFCBB7D815161A0804FD02EAEEE6D1DBD0E905160209E800F803FAEEF6F1D0D201F5EDEBEDFFF5EEFBF2FBE6D0E9FADDF4E2FCFCF7FEF9E7E9E5F1FB06F0F5F60000F9EAF1F6EBF11219FDFFFA03ECF6FFFDFAF6EAF5FCFFFFF2F1F5F5F801FDF2EBE7FBF2FBF4FFFEF901EAFDFFF0D8DEE2E9C9DCDAD4FF01FEF5DEE3BC8DD3D4FB0B010CE4E3F2EBE7D706D40C061D0F1614F906EFCBFED7E5EEE8F61911191B1107F2E2FF0B0810182D11081E14020B02E70CF9141D3E3A1306E9040D1004DA0C0A1C3D3B3813030D0C2012FCD5DC09021F0B32150E1B171C16E9E7FEF2ECF0050F102B1E0F0AE0E1E2E1D6D5E7EA23121603F00203B8ACD8F5F6020105140BF4FB07FBD0E8E4F60E11170D07FCF7040EDBC10AC4F5E8FB071007EBFA19FEEAE0FEDBD3E7E1E3F1E8ECFDDAAFC9E4F4ECF4FFF7FBF1ECE8FCF3FDEDFFF1E9F9F9FFEFEA05F504FAF114FDEF03F20905100915210D071EF3EDDE040C03F407050C1512031819F4ED04FF0706141BFA140F1010F201DF0CFA0CFA2438170B0D18280905E8F20B151B1C2612EF011608F8F6EFEA04FF082014FE150D051607F3DEDDF6F207101109130D1C11E2EED6E3F1F4FB0F200F1502ECF7F0FEDDF1F7ECF5081B03F804F9FDFEF1DFDD010CFC070015FCFBF4EDE1FFF1F1F3020000021308FE121401F3FED6DFFAF00708FE06FADDC9EAF80905FEDFCACAC0C0C6DDD5C4DFD8F8D2D4EB01F708EE0BF2F1F4E7FFEBC0E5F806052229120B0AFB1AECD8F1F2120A111A1B110C0AFF0703C4EE140B1412150817140C0914E7E1030D0E04F90617151E29271513C902F509142B11170A181D20FF08C7E5F51C121D2B161D0A0DFC0AF9D5E00E0018171F11FEE401EDF5CAE7E2F713121E07FAFDFC00F1EBEAAEDA02F9FFFEF8FFFD0E0405ECC4BCF8FEF3F10B0F1D19FF02E9E7B7FDCEE9E908FD0B1B0E07030107E40AEBC9EAD9FAF7FC1002ECC4D4F3EAF60001EFFAF9FDF1FFF803EEEC05F0DEF7D9D2F10902FCC1E001F7EDEECDD20529201D191206F6F203E4F9FB05190E061B1005FCFEFCF5E8FFEF00F9FF0F0C140C17FF0904E1E0EDEEF9F6EBFD22251D1B10FEE1150AFDEFE2D6022A35211B08F9DFF70E06F60BEF0A1A170A00ECF1DCF01508180403FE0003EBBFECF2DBECEB05050E01FEF4EBD6F202E5EAE3E9E4E9FAFC0A02FCFFF8EED7E0E6F9EEF9F8110B13000201EAEFF106E4E4EC010200FEFC08F8ECE5ECED02F3F6E9EFF2E3FFD3DAF103F9F505EDC1C6D3C3BBF6DACEEDDD04FAF3D4F5EAECE2F5F9C7FA05FA02EED2F213FDFCFE150D07FFF6FAF5C004FD2314031217FA0BF21204D4E9041F1F05040B090209171BFBE2DF0D0607EDDF14302522170EF8E400FCD6D4DBFD1B2C33271C08F4E5E4E1E2FE1D2A23F9FFF0EFF5E2F800E2333F3F3706DEE2DAE30D9DF1AEFC3535322CFFE7FD061915BCE7ABF2391718170314071616EFC9F99E05ECEBFA152229131921F7E305DAF6C0DCDCF105321C09E9C7DC07E8CFF3F0F5DFDCC9E996CAFA01F2EDF0F8F7FEEAF3FEF0F1FAEAFAFD02F8F2FB01F5FDF9F2FB00F9F8FCF2F5F807F8FBF90002ED03E5EEF8F0F5EFFF0106FE040505FEF600EEF2FBF3FBF7ED02031015F70501FEF2F1F0EFEEDDF513151905FD01F0F10003E6E7DAEB07FF0003FAF0F2EDFAF302F9E00A14F4EEE8EF02EEF8FBF80A14FA18FDFBF9E902FCFBF2F41D1A240F110D0DF6FA0AF5F8EDE6F1F613001907060BFB01F3F3F606EEF0FC13FCF8FEF20509E9FBF8F109E40FF710FEF7F7EEF6EFFFF801F2F2F6ECF5F3F3F1F1EEFAE8F4ECFAF4F8EAF6EEEAE8EBEBFBF401F1EEFBF7F5F000F5FAF902FF00FA01FEE8F60CFAFBFDFDF6F1F0F6F5FFF6F300070BFB070A10EBFCFCFEECF8F6040A081304F9EAEFF6FFE5F4F708161B2D01F503F8FCE3FA0BF708161110EEEFF0F0EAF3FA02FA06F8F8FCDB030A060C09F1FFF0ED08EDD1D0DF0D353822FAF8EB02F6F0D3B4D0F81D23FCF7FAE8F5F6EEF5DCEEF7221505F5F8F0F3F7FCF5FFFE0320260BF500E8E6F4FCF403F306FB020EFCEEF6FD00ECECFFE8FDF5FCEEEF04EFE3F8EAF4EEEEF902C3C9DBCCC1DBEADCD4EFECFAF1DBE70B13F50102ECE8F5050CFED3E9F2F2EFF90D00140300F0F1F8E2D2DC0FEAF00E060AFC070BF603DFEAFEFD0E15140A010B001A13F8E91619141E23280BF50CFA1516FADA0C28262D2A1C02F5E2DDEBF9FDE5DB02FA112C1713FFFCEFF507FDDFF1F6D0010C0C261C0603F9FA02E3D607F0FD0B251D0A0D0516CD04E2EC231E1E13180B0A03130DB3FBE5EF1532221A1201F600FF0CCEF9FFDFF50A04ECE8F8FA0DE301E2EB02E6D4EDDACDE0DBE5DAD2C2F4F709F5D0D3D3CEAECDE1CAC6F6DEEBF7D3EAF910F5F3EFF9F0F6F803FFD4D4EAEFE7EC0C080E0603F501EED9E5DD09DA02FD0C01110BFC0BE9DCF90909021911041109120000F7EB162D252025230EF10B01140EECCE0C251D2F2D21EFEBE1DBF602FFDCEFF4F016161303F5F9EEFDF7FBE3E2FFE7011503110F0CFA07F6EACFE311080E080C0A1A0A0212CCEFECF82B27131A1D1502051513B5FFE5E2203322120F02F00D0413CDF0E7DDF8F7E6ECEEFCEC10EE04D0F2F3E6C5DECECAE7E2F7EECDC7000BF80C04F904F8FAF80BFCF5FCF7FC0708F9F3FB01EDFDF1E1E0F2F909F5E9FF161313FD11050DF60105EFFCE8FEF511192420F4EEECEA05FFF9FFEE10153814EFF6E7C8EE08F2F31200F5021B0F1209EFF1EC030105F2E5EDD90C12FCECDBBBD1FBF6E8DAE6C8E215FAD6D4D1D9DD05F8FBE1D3D91115F0EFDCB8D3F1FD06E1F4FA02FD0408F4D6DA09060C0CECFC061E16191E02F0D8F6FFFCFEF8FD0608101606F004F6EE09060B07121301EEDEE3EEEEE8EE03F9080707000203FEF5FDF0F20A03FDFD0AFBFD0503F8F202F6F5FAF2FA0206F3FB060103FAF7F4F6F10A02F5F8F6F5FF00FEFEFB0802F7F30AF2FD0104FCE9FA0FFF02F70302F20AF402F9F7E6E1CDFAFE0D0C0207FFFF06F8DEBDC1D9F7E904F202FEFDF8F2FAE2D6C8E0F5DEECF505F70BF50401E5E6E6CEDCE2E6FE02F6F407FEEFF3F7F8F0E6F7F70C09F4F70AF8FC111113FE080901FF05F409FF040C0D091109FFF8060BFC09FEFD02010BFFF9EA09F4F50501F5F4F205F8F1F3ED04FBFD05020501F804F8FFFF04F0070606F4FCF2FB0901F200020AFAFDFA02F70AF4F5F108FEF3FEF60004040008FFF5FAF2FCF306F5FBFB06FD03FD05F908F8F600010317FBDEFAEB08FEFAF504F7FEF8F8F7EAF1FBE60BF600FF00FE03EFE9CFE2EDE7DCE6E8F509030AF9E3D1D0EDE1D1DEF2FDF50608F6F6ECCDCF1708EAE8F5FAFBFEF4FCFDDFDF042505F9EFF20B05070405F604F8041F1CFAE7EC04EF02FAFFF7FE081E1500F2FAF4F30BFBF502000406F202F1F6E7EEF901F7F207FAFDF301F5F1F9FCF7F6F6F4F5FBF80D07FBF904F70409080905000305F4F3D6E5D5E3D8D8EF07F8F1DEEFDEDBC9CDD9E6EBC9DFF1F506E7CC9EA9CCDEEEF002F3BCD1DCD9C1C8D8C2E819211B332302EDDDEDE1E4C8F004142913250303ECD4DBFED3FCF8172728151F04F7F3F0CEF7071D042D1313F5FDF2F4F4DCBD08101E12220910F2E8F6F0DCC3C8F01E0D21191BEDF6DBE9EBC5D3C5BFFA0C1E23FFEFE9D6D0EBC0D0C5D60AFB05F4FCE9D8DFEFF5030AD2D9F8EFFFFAEDF3E7F6EBFE20F2F00508F5FCF9EFFD050A101210EC0122262D100A0D1010031C0EF4F804FAFBF8F5F4F805FEFDFB0907000100F3D6DBE6F1CDC7B4CFE4F7F3FDE8EBFAF4E402E9E0C2CBA9DDF9F4E4EFEDF71740241303FCE0C607EFEA05050B1E2C1513161507D8F6E3F1080C1706210C0E0B02EED804EA1109FE121E28250E11EEEDF307E30FF40905082F2804E5F7E7D5FAE5F3F20A05171913FEE3D4E6CAF5E1F3F3021A021D05EAEDE0E0E0F3ECE9EE0FF40EF7FDF1F7ECFD0506F2ECFB070CEDE3F7F0F5F1F41008F909090B05FDFC07FF07FD2611F5F70B0E0B060DF4FEFFFF0F04F3F5FC0704E5CDF4E2E9E3D7D0DDF6EFE9D6E8E1CAC3ECF2E5F6EAB4DEDEF2E1B5CE1116F9E4F711F4EFDEE5CFC6EA080D1B3A3519F3D9D6E4D9E3DC05110827252516FCEC06CEEBCBD812030D17132510F80FF4D5CDD0080B09FDFF0C32060A02E1D7FBD70EFAFB06FD190EF4FAEBD4EDCBC3F50BF9141C12090EE9E4F1D3D7D7F4F7FC06FEF8F9EDECF5E3EFEEAE01021009F70A00F6F7EBF80717B9DBF90C0805F5DDE4DFF80914F2D6F7F80E0107F7F1F80808FB20D8FB0E28041B1318091B16171AFA0AFAFAF4F00702040002F803FDFCF7F6FAF0FDFAEAE7E9DAF6F5E3F2FAEAF6F8EED4EB1611FEE5C5B0D2ECFAEFDEFF1E37392A25F6DDE3C8FCDCDF1212101A17151505F2E5E2EDF2D7F2F1FD0F1414FDF7F4E9FAF7EAF206E8DDF61649E8E9F4FF04E3E6EDE4EDE7FE4121F5EFF8F8C9DEEBF7EAE0F619411E06E9DAF9CAF2F4EBF50213301D1BF2E3FEF6D5E7E5F2FE1F1A130CE1DCE3F0E310FEEEF2F70908F4FAEAF6E8E30D2311F4FB1511FB03FEE301F51417FCF705FD16282008170C06241E00F9F1010C0600D9EBF3E6DCE1D1EDFBF303E3F6D1E7DDE6D5C1E4EAB2DEF3F4E5E7BFB7DF0DECC5D9D9E2C9E7F4E6B7022313121908E4DAE0DBDEE2D5FE2F2D2A282400EADED9DEE7E0C7192C1D0B130FF8F5F909FFE5E6F51E040003F32306060B10EFC3D3D306F1DCDAE911FC07210DBEC703D0EDCFAEC1E00709091E09BBF407E6E1F3A4D6F00C05F5F5D3EA0BFCE2F4FEE1EFFDF90AF5E6EB1E03F2D1F203050DFFF7F0E3FAF216EB01F01A0F0B180AF2EDDFFA1702F707E8370C17100A22142D21F9F8FAFA070309FA0A0AF5FEFEF9F3FFF40703F80C0C04FAF604FC03F4F60A07FCFC0009E801F3F2EC00FFF80AF50208FA030906EDF3E6EF02F1F50609F7FD190F17001CF3EC01FDF9060109050000F4F101EBFDF9030B0005FBF204E5F2D6F5080A0105FDF40D08ECE5EC10EF0811020BF6FC0806FD04ECF103FE000D0B04FB04F702FE1106F90F0B04F2FAF4FA04FEFC09050C01FBF0F5F9FDFD050CFFF8FEF404F5F9FD04FAFBFEFDF7FDFEFBF60CF2FAFAF809F9FD0CF709FC09081006050B07060703FE06F4FCF202F1F709F4F209F209FDF602F3F3070AFCFD00FF0B04F508010503F206F1FDFD09FF08FE09F8F606FB04E7E8EE0C1114F71CF8F4FF00FBF7E9DDE0F1F70B1622080BFFF3F0EADBD7F4FEFE0020F6080FF7F80104F4FC364501D5E0CF0707FAF510FDF40D2B4305CAABCFF90C02F1F4010413432101DBC9EDFC080101F2FE1C2C1D12F2E5DBF3F10800F0FB0A061C1EF7D7D60905100502F0ED08FEF8D5DAF604FEF8060003F7F1F9FEE9EAE6F7FA0DFF070B0AF60502050706011204141103F2FEF304F6DBF7DEDDD9D7CFE3DFF3F5F5F6F1E1C2C2FCF6EBE6E4AFD2E2FBE7D3D0E7E3F3F1FBF7F7E5E2D2EAD6B1C9B7B8E005140406FEEAF001D5B5C0E4FEEE0A0F1A050AF9E6F5D9FE051702FBED090D19211C06F6E83526151CFFCFFF04021E13EEF6D333201D09F6B802FAFB04F9B908DC07112908DCD4E7F8F3FCDEC6FED4E111F4EAD8F0FAFC01FEF60AFBC6E4010C07F4FDF1FCF3FB0C0304E6DBD8D9F3F906FF0B0E1612F1F3F5FA160D0B0A1C111D0B1911ECFA0BFC122C1C2C0F171E0D161112F101FAE1F7E4E7E2E7CCE0E0E3F2F0F3DFDFCFBCFAEFE1F0D9B5CFE7F9E4C1C1F3D907EEFCFCF9EBDED5F1D6A9B0B9B0E7FE0DF80500EAEBFBD3C7C9E6E3FEFA0D0E0BF9FDE3FCE301191D1608F8F50F0E1F15FBF5D93E301B16FBBC070F122401EBF2E834291412D8A9F6F9FE06F1B8F8E6131E1F0BB6D4F4F70D03EAC8F2C6E00EEFE6CDEBF9F509FDFEF1F0D4C604F7EEEB04FAF40401121601D5D7CED6EA0A1110FE0E180E00F1F3F30110F91A1D1216161F10EF06FDFF0D371E221D1332171C020C\"\n", - " }\n", - " }\n", - "#-}\n", - "\n" - ] - } - ], - "source": [ - "print(coreai_program)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43bfc6d2", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/tests/conftest.py b/tests/conftest.py index 3e385f6..2dbafaa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -20,11 +20,6 @@ import pytest import torch -from coreai_opt.quantization import ModuleQuantizerConfig, QuantizerConfig -from coreai_opt.quantization.spec import ( - default_activation_quantization_spec, - default_weight_quantization_spec, -) from tests.utils import test_artifact_path pytest_plugins = [ @@ -64,27 +59,6 @@ def pytest_addoption(parser: pytest.Parser) -> None: ) -def make_graph_mode_ptq_config(*, quantize_activations: bool) -> QuantizerConfig: - """Build a graph-mode w8 (weight-only) or w8a8 PTQ QuantizerConfig. - - Args: - quantize_activations (bool): True for w8a8, False for w8 weight-only. - - Returns: - QuantizerConfig: Config with the default weight spec globally, plus the - default activation spec on every op input/output when requested. - """ - activation_spec = default_activation_quantization_spec() if quantize_activations else None - return QuantizerConfig( - global_config=ModuleQuantizerConfig( - op_state_spec={"weight": default_weight_quantization_spec()}, - op_input_spec={"*": activation_spec} if activation_spec else None, - op_output_spec={"*": activation_spec} if activation_spec else None, - ), - execution_mode="graph", - ) - - def pytest_configure(config: pytest.Config) -> None: """Publish the selected compute unit to the export test utils. diff --git a/tests/export/test_composite_op_externalize.py b/tests/export/test_composite_op_externalize.py index 9a00770..2740e72 100644 --- a/tests/export/test_composite_op_externalize.py +++ b/tests/export/test_composite_op_externalize.py @@ -44,7 +44,7 @@ default_activation_quantization_spec, default_weight_quantization_spec, ) -from tests.conftest import make_graph_mode_ptq_config +from tests.fixtures.quantization import make_graph_mode_ptq_config from tests.models.composite import ( CompositeRMSNormModel, CompositeRMSNormOnlyModel, diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index 75c57fb..01db317 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -27,11 +27,13 @@ QuantizationFormulation, QuantizationScheme, ) -from tests.conftest import make_graph_mode_ptq_config from tests.fixtures.compression import ParametrizedP4A8CompressionConfigs from tests.fixtures.fp4 import ParametrizedFP4Configs from tests.fixtures.fp8 import ParametrizedFP8Configs -from tests.fixtures.quantization import ParametrizedQuantConfigs +from tests.fixtures.quantization import ( + ParametrizedQuantConfigs, + make_graph_mode_ptq_config, +) from tests.models.composite import CompositeRMSNormModel, CompositeSDPAModel from . import export_utils diff --git a/tests/fixtures/quantization.py b/tests/fixtures/quantization.py index 4ee165b..58fedfe 100644 --- a/tests/fixtures/quantization.py +++ b/tests/fixtures/quantization.py @@ -19,6 +19,8 @@ PerTensorGranularity, QuantizationScheme, QuantizationSpec, + default_activation_quantization_spec, + default_weight_quantization_spec, ) from coreai_opt.quantization.spec.fake_quantize import _DefaultFakeQuantizeImpl from coreai_opt.quantization.spec.qparams_calculator import StaticQParamsCalculator @@ -81,6 +83,27 @@ def _spec(dtype: torch.dtype | str) -> QuantizationSpec: ) +def make_graph_mode_ptq_config(*, quantize_activations: bool) -> QuantizerConfig: + """Build a graph-mode w8 (weight-only) or w8a8 PTQ QuantizerConfig. + + Args: + quantize_activations (bool): True for w8a8, False for w8 weight-only. + + Returns: + QuantizerConfig: Config with the default weight spec globally, plus the + default activation spec on every op input/output when requested. + """ + activation_spec = default_activation_quantization_spec() if quantize_activations else None + return QuantizerConfig( + global_config=ModuleQuantizerConfig( + op_state_spec={"weight": default_weight_quantization_spec()}, + op_input_spec={"*": activation_spec} if activation_spec else None, + op_output_spec={"*": activation_spec} if activation_spec else None, + ), + execution_mode="graph", + ) + + @dataclass class ParametrizedQuantConfigs: """Container for parametrized Eager and PT2E quantization configs. From ee9107c365e1e77b2d8d8808e6811ad65bfcb118 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:28:59 -0700 Subject: [PATCH 07/15] index select for composite input quantization and refactoring Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- tests/export/test_composite_op_externalize.py | 108 +++++++++++++++--- tests/export/test_graph_mode_mlir_export.py | 28 ++--- tests/models/composite.py | 34 ++++++ .../test_graph_mode_quantizer_mnist.py | 16 +-- 4 files changed, 138 insertions(+), 48 deletions(-) diff --git a/tests/export/test_composite_op_externalize.py b/tests/export/test_composite_op_externalize.py index 2740e72..cdf64be 100644 --- a/tests/export/test_composite_op_externalize.py +++ b/tests/export/test_composite_op_externalize.py @@ -17,7 +17,10 @@ via a module-level config, by name and by type, on a bare composite, on a mixed model with other quantized ops, and on a multi-tensor (q / k / v) SDPA composite; a distinct dtype on the composite config proves it outranks the - global spec at the boundary (``TestCompositeOpIOQuantization``). + global spec at the boundary (``TestCompositeOpIOQuantization``). A proper + subset of integer input indices selects exactly those positional args, which + pins the index -> argument mapping the wildcard cannot + (``test_composite_boundary_input_index_selects_those_args``). End-to-end lowering and execution tests live in ``tests/export/test_graph_mode_mlir_export.py::test_composite_externalize_export``. @@ -29,7 +32,6 @@ import torch import torch.nn as nn from coreai_torch import ExternalizeSpec, _patch_model_for_externalization -from coreai_torch.composite_ops import SDPA, RMSNormImpl from coreai_opt import ExportBackend from coreai_opt.quantization import ( @@ -49,6 +51,8 @@ CompositeRMSNormModel, CompositeRMSNormOnlyModel, CompositeSDPAModel, + rmsnorm_externalize_spec, + sdpa_externalize_spec, ) from tests.test_utils.general import ( assert_single_call_function_node, @@ -57,16 +61,8 @@ is_coreai_quantize, ) -_RMSNORM_SPEC = ExternalizeSpec( - target_class=RMSNormImpl, - composite_op_name="rms_norm", - composite_attrs=["axes", "eps"], -) -_SDPA_SPEC = ExternalizeSpec( - target_class=SDPA, - composite_op_name="scaled_dot_product_attention", - composite_attrs=["scale", "is_causal", "window_size"], -) +_RMSNORM_SPEC = rmsnorm_externalize_spec() +_SDPA_SPEC = sdpa_externalize_spec() @pytest.mark.parametrize( @@ -139,24 +135,34 @@ class TestCompositeOpIOQuantization: _COMPOSITE_ACT_DTYPE = torch.uint8 @classmethod - def _config(cls, spec: ExternalizeSpec, module_name: str, target_by: str) -> QuantizerConfig: + def _composite_act_spec(cls) -> QuantizationSpec: # The composite config must use a dtype DISTINCT from the global # (default) activation dtype: a matching dtype collapses via observer # sharing into a vacuous no-op, so the composite's effect at the # boundary would not be observable. assert cls._COMPOSITE_ACT_DTYPE != default_activation_quantization_spec().dtype - composite_act = QuantizationSpec( + return QuantizationSpec( dtype=cls._COMPOSITE_ACT_DTYPE, qscheme=QuantizationScheme.SYMMETRIC, granularity=PerTensorGranularity(), ) + + @classmethod + def _config( + cls, + spec: ExternalizeSpec, + module_name: str, + target_by: str, + module_input_spec: dict | None = None, + ) -> QuantizerConfig: + composite_act = cls._composite_act_spec() global_config = ModuleQuantizerConfig( op_state_spec={"weight": default_weight_quantization_spec()}, op_input_spec={"*": default_activation_quantization_spec()}, op_output_spec={"*": default_activation_quantization_spec()}, ) composite_config = ModuleQuantizerConfig( - module_input_spec={"*": composite_act}, + module_input_spec=module_input_spec or {"*": composite_act}, module_output_spec={"*": composite_act}, ) if target_by == "name": @@ -172,12 +178,13 @@ def _finalize( spec: ExternalizeSpec, module_name: str, target_by: str, + module_input_spec: dict | None = None, ) -> tuple[torch.fx.GraphModule, str]: _patch_model_for_externalization(model, [spec]) op_name = model.get_submodule(module_name)._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" - quantizer = Quantizer(model, self._config(spec, module_name, target_by)) + quantizer = Quantizer(model, self._config(spec, module_name, target_by, module_input_spec)) prepared = quantizer.prepare((sample,)) assert_single_call_function_node(prepared, target_substr, stage="prepared") @@ -234,3 +241,72 @@ def test_composite_boundary_quantized( sample = torch.randn(2, 4, 32, dtype=torch.float16) finalized, target_substr = self._finalize(model, sample, spec, module_name, target_by) self._assert_boundary_quantized(finalized, target_substr, num_tensor_inputs) + + @pytest.mark.parametrize("target_by", ["name", "type"]) + def test_composite_boundary_input_index_selects_those_args(self, target_by: str) -> None: + """Integer keys in ``module_input_spec`` quantize exactly those positional args + for composite ops. + + The unselected input is left unquantized rather than falling + back to the global spec, because the composite is opaque to the + op-pattern annotator and only a module-level config reaches its edges. + """ + quantized_indices = (0, 2) + num_tensor_inputs = 3 + model = CompositeSDPAModel().eval().half() + sample = torch.randn(2, 4, 32, dtype=torch.float16) + + finalized, target_substr = self._finalize( + model, + sample, + _SDPA_SPEC, + "composite", + target_by, + module_input_spec={i: self._composite_act_spec() for i in quantized_indices}, + ) + + composite = assert_single_call_function_node(finalized, target_substr, stage="finalized") + tensor_inputs = [ + a for a in composite.args if isinstance(a, torch.fx.Node) and a.op != "get_attr" + ] + assert len(tensor_inputs) == num_tensor_inputs, ( + f"Expected {num_tensor_inputs} tensor inputs to {composite.name}, " + f"got {[n.name for n in tensor_inputs]}" + ) + + # Each selected index must be fed by a dequantize whose producing + # quantize carries the composite dtype; each unselected index must not + # be quantized at all. + for index, act_input in enumerate(tensor_inputs): + if index in quantized_indices: + assert is_coreai_dequantize(act_input.target), ( + f"input {index} was selected by module_input_spec but is not fed by " + f"a dequantize: {act_input.target}" + ) + input_dtype = get_quantize_dtype(act_input.args[0]) + assert input_dtype == self._COMPOSITE_ACT_DTYPE, ( + f"input {index} was selected by module_input_spec but is quantized as " + f"{input_dtype}, expected the composite dtype {self._COMPOSITE_ACT_DTYPE}" + ) + else: + assert not is_coreai_dequantize(act_input.target), ( + f"input {index} was not selected by module_input_spec but is fed by " + f"a dequantize: {act_input.target}" + ) + + # module_output_spec stays the wildcard, so the composite's consumer is + # quantized with the composite dtype regardless of which inputs were selected. + consumers = list(composite.users) + assert len(consumers) == 1, ( + f"expected the composite to have exactly one consumer, got " + f"{[n.name for n in consumers]}" + ) + consumer = consumers[0] + assert is_coreai_quantize(consumer.target), ( + f"the composite's consumer is not a quantize node: {consumer.target}" + ) + consumer_dtype = get_quantize_dtype(consumer) + assert consumer_dtype == self._COMPOSITE_ACT_DTYPE, ( + f"the composite's output is quantized as {consumer_dtype}, expected the " + f"composite dtype {self._COMPOSITE_ACT_DTYPE}" + ) diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index 01db317..a9c68b9 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -11,7 +11,6 @@ import pytest import torch from coreai_torch import ExternalizeSpec, _patch_model_for_externalization -from coreai_torch.composite_ops import SDPA, RMSNormImpl from coreai_opt import ExportBackend from coreai_opt.palettization.kmeans import KMeansPalettizer @@ -34,7 +33,12 @@ ParametrizedQuantConfigs, make_graph_mode_ptq_config, ) -from tests.models.composite import CompositeRMSNormModel, CompositeSDPAModel +from tests.models.composite import ( + CompositeRMSNormModel, + CompositeSDPAModel, + rmsnorm_externalize_spec, + sdpa_externalize_spec, +) from . import export_utils @@ -459,24 +463,8 @@ def test_integer_quant_minval_export( @pytest.mark.parametrize( "model_cls, externalize_spec", [ - pytest.param( - CompositeRMSNormModel, - ExternalizeSpec( - target_class=RMSNormImpl, - composite_op_name="rms_norm", - composite_attrs=["axes", "eps"], - ), - id="rmsnorm", - ), - pytest.param( - CompositeSDPAModel, - ExternalizeSpec( - target_class=SDPA, - composite_op_name="scaled_dot_product_attention", - composite_attrs=["scale", "is_causal", "window_size"], - ), - id="sdpa", - ), + pytest.param(CompositeRMSNormModel, rmsnorm_externalize_spec(), id="rmsnorm"), + pytest.param(CompositeSDPAModel, sdpa_externalize_spec(), id="sdpa"), ], ) def test_composite_externalize_export( diff --git a/tests/models/composite.py b/tests/models/composite.py index 5359cfe..356465a 100644 --- a/tests/models/composite.py +++ b/tests/models/composite.py @@ -18,6 +18,40 @@ _BATCH = 2 +# Externalize specs shared by the externalization test modules. +# +# These are factories rather than module-level constants on purpose: this module +# is registered as a pytest plugin in tests/conftest.py, so it is imported for +# every test session, while ``coreai-torch`` is an optional extra. Importing it +# at module scope would break collection for anyone without the extra, so the +# imports stay function-local (same reason the model classes import inside +# ``__init__``). + + +def rmsnorm_externalize_spec(): + """ExternalizeSpec targeting the RMSNormImpl composite.""" + from coreai_torch import ExternalizeSpec # noqa: PLC0415 + from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 + + return ExternalizeSpec( + target_class=RMSNormImpl, + composite_op_name="rms_norm", + composite_attrs=["axes", "eps"], + ) + + +def sdpa_externalize_spec(): + """ExternalizeSpec targeting the SDPA composite.""" + from coreai_torch import ExternalizeSpec # noqa: PLC0415 + from coreai_torch.composite_ops import SDPA # noqa: PLC0415 + + return ExternalizeSpec( + target_class=SDPA, + composite_op_name="scaled_dot_product_attention", + composite_attrs=["scale", "is_causal", "window_size"], + ) + + class CompositeRMSNormModel(nn.Module): """Linear -> RMSNormImpl (composite) -> Linear over rank-3 activations.""" diff --git a/tests/quantization/test_graph_mode_quantizer_mnist.py b/tests/quantization/test_graph_mode_quantizer_mnist.py index 1101b06..229d6b0 100644 --- a/tests/quantization/test_graph_mode_quantizer_mnist.py +++ b/tests/quantization/test_graph_mode_quantizer_mnist.py @@ -7,8 +7,7 @@ import pytest import torch -from coreai_torch import ExternalizeSpec, _patch_model_for_externalization -from coreai_torch.composite_ops import RMSNormImpl +from coreai_torch import _patch_model_for_externalization import tests.utils as utils from coreai_opt import ExportBackend @@ -23,6 +22,7 @@ PerTensorGranularity, ) from tests.export import export_utils +from tests.models.composite import rmsnorm_externalize_spec from tests.test_utils.general import assert_single_call_function_node image_size = 28 @@ -333,6 +333,7 @@ def test_weight_and_activation_qat_mnist(mnist_pretrained_model, mnist_dataset, assert post_qat_accuracy == finalized_accuracy +@pytest.mark.slow @pytest.mark.seed def test_weight_and_activation_qat_mnist_with_externalized_composite( mnist_composite_rmsnorm_pretrained_model, @@ -369,16 +370,7 @@ def test_weight_and_activation_qat_mnist_with_externalized_composite( f"expect pretrained MNIST-composite model accuracy > 92%, got {accuracy:.2f}%" ) - _patch_model_for_externalization( - model, - [ - ExternalizeSpec( - target_class=RMSNormImpl, - composite_op_name="rms_norm", - composite_attrs=["axes", "eps"], - ), - ], - ) + _patch_model_for_externalization(model, [rmsnorm_externalize_spec()]) op_name = model.norm._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" From 2e9459530a80560c53a42fdc7e53ea2713290b82 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 11 Aug 2026 14:38:07 -0700 Subject: [PATCH 08/15] cleanup Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- tests/export/export_utils.py | 7 ---- tests/export/test_composite_op_externalize.py | 41 +++---------------- tests/export/test_graph_mode_mlir_export.py | 9 ---- tests/models/composite.py | 17 +------- .../test_graph_mode_quantizer_mnist.py | 26 ------------ tests/test_utils/general.py | 18 +------- 6 files changed, 8 insertions(+), 110 deletions(-) diff --git a/tests/export/export_utils.py b/tests/export/export_utils.py index 51e8c2d..9e20533 100644 --- a/tests/export/export_utils.py +++ b/tests/export/export_utils.py @@ -538,13 +538,6 @@ def _lower_to_coreai( exported_program: The exported program to lower. externalize_model: Optional ``torch.nn.Module`` that was marked in place by ``coreai_torch._patch_model_for_externalization``. - When provided, - ``_subexport_and_restore(model, exported_program)`` is run to - sub-export each marked composite (and restore the patched - forwards); the resulting ``_ExternalizedExportedProgram`` list - is passed to ``TorchConverter.add_exported_program`` via - ``_externalized_exported_programs`` so the composites survive - lowering as opaque calls. """ converter = coreai_torch.TorchConverter() externalized_exported_programs = ( diff --git a/tests/export/test_composite_op_externalize.py b/tests/export/test_composite_op_externalize.py index cdf64be..b775c96 100644 --- a/tests/export/test_composite_op_externalize.py +++ b/tests/export/test_composite_op_externalize.py @@ -9,21 +9,6 @@ Test structural assertions: after ``_patch_model_for_externalization`` patches a composite submodule's forward into a ``torch.library.custom_op``, the resulting opaque call_function node survives Graph-mode ``prepare`` + ``finalize``. -Coverage spans: - -- the RMSNorm composite under both w8 weight-only and w8a8: - ``test_composite_op_survives_prepare_and_finalize`` -- explicit quantization of the composite's own input/output boundary - via a module-level config, by name and by type, on a bare composite, on a - mixed model with other quantized ops, and on a multi-tensor (q / k / v) SDPA - composite; a distinct dtype on the composite config proves it outranks the - global spec at the boundary (``TestCompositeOpIOQuantization``). A proper - subset of integer input indices selects exactly those positional args, which - pins the index -> argument mapping the wildcard cannot - (``test_composite_boundary_input_index_selects_those_args``). - -End-to-end lowering and execution tests live in -``tests/export/test_graph_mode_mlir_export.py::test_composite_externalize_export``. """ from __future__ import annotations @@ -79,16 +64,6 @@ def test_composite_op_survives_prepare_and_finalize( ) -> None: """The externalized composite must remain a single opaque call_function node end-to-end, under both w8 and w8a8. - - ``_patch_model_for_externalization`` swaps the submodule's forward for a - ``torch.library.custom_op`` BEFORE the quantizer runs, so graph mode's - annotator never sees the composite body and cannot insert q-dq - inside it. The structural guarantee here is that the custom-op - call survives ``Quantizer.prepare`` (which traces the model into - a GraphModule and inserts observers) and ``Quantizer.finalize`` - (which converts observers into coreai q-dq / constexpr nodes), - irrespective of whether activation observers are inserted on - surrounding ops. """ model = composite_rmsnorm_model sample = composite_rmsnorm_input @@ -122,14 +97,11 @@ class TestCompositeOpIOQuantization: """Ensure externalized composite's I/O boundary can be quantized via a module-level config, by name and by type. - The composite is opaque to the op-pattern annotator, but the custom-op - node retains ``nn_module_stack`` metadata (path and type), so a module-level - config can target it for i/o quantization at the boundary. A global config - quantizes the rest of the model with the default activation dtype (int8) and - the composite config provides a distinct ``_COMPOSITE_ACT_DTYPE`` (uint8) on - the composite's edges. Module config outranks global, so the composite - boundary must carry the composite dtype while every other quantized edge - carries the global dtype. + A global config quantizes the rest of the model with the default activation + dtype (int8) and the composite config provides a distinct + ``_COMPOSITE_ACT_DTYPE`` (uint8) on the composite's edges. Module config + outranks global, so the composite boundary must carry the composite dtype + while every other quantized edge carries the global dtype. """ _COMPOSITE_ACT_DTYPE = torch.uint8 @@ -274,9 +246,6 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) f"got {[n.name for n in tensor_inputs]}" ) - # Each selected index must be fed by a dequantize whose producing - # quantize carries the composite dtype; each unselected index must not - # be quantized at all. for index, act_input in enumerate(tensor_inputs): if index in quantized_indices: assert is_coreai_dequantize(act_input.target), ( diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index a9c68b9..c7e91f5 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -481,15 +481,6 @@ def test_composite_externalize_export( on the runtime output and op-count verification on the exported program (``constexpr_blockwise_shift_scale`` for weight quantizers and ``quantize`` / ``dequantize`` for activation quantizers). - - Both models wrap their composite in two Linears, so the op counts are - identical across the RMSNorm and SDPA cases: the composite itself is - opaque and contributes no quantizers of its own under a global config. - - ``externalize_model`` is forwarded through ``convert_and_verify``'s - ``**converter_kwargs`` so the MLIR converter runs - ``_subexport_and_restore(model, ep)`` and sees the opaque composite - during ``TorchConverter.add_exported_program``. """ model = model_cls().eval().half() input_data = torch.randn(2, 4, 32, dtype=torch.float16) diff --git a/tests/models/composite.py b/tests/models/composite.py index 356465a..f617e4e 100644 --- a/tests/models/composite.py +++ b/tests/models/composite.py @@ -19,13 +19,6 @@ # Externalize specs shared by the externalization test modules. -# -# These are factories rather than module-level constants on purpose: this module -# is registered as a pytest plugin in tests/conftest.py, so it is imported for -# every test session, while ``coreai-torch`` is an optional extra. Importing it -# at module scope would break collection for anyone without the extra, so the -# imports stay function-local (same reason the model classes import inside -# ``__init__``). def rmsnorm_externalize_spec(): @@ -120,16 +113,10 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: return self.softmax(x) +# Function scoped so the consuming test's seed marker applies. @pytest.fixture(scope="function") def mnist_composite_rmsnorm_pretrained_state(mnist_dataset) -> dict: - """One-epoch-pretrained state_dict for MNISTCompositeRMSNormModel. - - Training costs ~1.5s. This fixture is function scoped so the - repo-wide seeding policy applies: determinism comes from the - consuming test's ``@pytest.mark.seed`` marker, which the autouse - ``seed_every_test`` fixture in ``tests/conftest.py`` honors before - this fixture runs. - """ + """One-epoch-pretrained state_dict for MNISTCompositeRMSNormModel.""" model = MNISTCompositeRMSNormModel() train_ds, _ = mnist_dataset diff --git a/tests/quantization/test_graph_mode_quantizer_mnist.py b/tests/quantization/test_graph_mode_quantizer_mnist.py index 229d6b0..46437ea 100644 --- a/tests/quantization/test_graph_mode_quantizer_mnist.py +++ b/tests/quantization/test_graph_mode_quantizer_mnist.py @@ -346,21 +346,6 @@ def test_weight_and_activation_qat_mnist_with_externalized_composite( for externalization -> prepare -> post-prepare drop -> train under ``training_mode()`` -> post-QAT recovery -> finalize -> finalized accuracy matches post-QAT accuracy. - - Externalize-specific overlay: - - ``_patch_model_for_externalization`` is applied BEFORE - ``Quantizer.prepare`` so graph mode treats the composite as opaque - and cannot insert q-dq inside the RMSNorm body. - - The composite itself carries no quantization annotation: the - global config only annotates registered op patterns, so the - composite's own input and output edges are not targeted here. - - After finalize, the graph must contain exactly one - ``coreai_torch_ext::norm`` call_function node. - - The finalized model lowers to a runnable .aimodel and the - runtime output matches the finalized torch output under the - SNR / PSNR thresholds enforced by ``convert_and_verify``. - ``externalize_model`` is forwarded so the composite stays - opaque through ``TorchConverter.add_exported_program``. """ train_loader, test_loader = utils.setup_data_loaders(mnist_dataset, batch_size) @@ -374,17 +359,6 @@ def test_weight_and_activation_qat_mnist_with_externalized_composite( op_name = model.norm._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" - # w8a8 via the default global config, which is equivalent to a bare - # `QuantizerConfig()`. Both activation and weight dtype default to int8: - # activations symmetric per-tensor, weights symmetric per-channel on - # axis 0. - # The global config does not reach the externalized composite's - # boundary because it only annotates registered op patterns. The - # composite's input edge is dequantized only incidentally by fc1's - # output observer, and its output edge is not quantized at all. - # Quantizing a composite boundary requires a module-level config and is - # covered in tests/export/test_composite_op_externalize.py:: - # TestCompositeOpIOQuantization. config = QuantizerConfig(global_config=ModuleQuantizerConfig()) quantizer = Quantizer(model, config) diff --git a/tests/test_utils/general.py b/tests/test_utils/general.py index 11ec6ee..4dc9c5e 100644 --- a/tests/test_utils/general.py +++ b/tests/test_utils/general.py @@ -151,17 +151,7 @@ def assert_single_call_function_node( def is_coreai_quantize(target: object) -> bool: - """Whether an FX node target is the ``coreai::quantize`` op. - - Compares by object identity against ``torch.ops.coreai``. Both forms are - matched because they are distinct objects and which one appears depends - on the pipeline stage: ``Quantizer.finalize`` emits the - ``OpOverloadPacket`` (``coreai.quantize``) while a decomposed - ExportedProgram carries the ``OpOverload`` (``coreai.quantize.default``). - - The op resolves lazily on first call, so this raises AttributeError if - the coreai op namespace was never registered (see ``COREAI_AVAILABLE``). - """ + """Whether an FX node target is the ``coreai::quantize`` op.""" return target is coreai.quantize or target is coreai.quantize.default @@ -173,12 +163,6 @@ def is_coreai_dequantize(target: object) -> bool: def get_quantize_dtype(node: torch.fx.Node) -> torch.dtype | None: """Return the quantized dtype carried in an FX node's args, else None. - ``coreai::quantize`` takes ``(input, scale, dtype)``, so its dtype is the - third positional arg. ``coreai::dequantize`` takes ``(input, scale)`` and - carries no dtype, so this returns None for a dequantize node. To read the - dtype at a dequantize boundary, pass the quantize node feeding it - (``dequantize_node.args[0]``). - Args: node: The FX node to inspect From 5c3e15f414014e1c6a0fc9a118101ff6fd2afae7 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 11 Aug 2026 16:14:50 -0700 Subject: [PATCH 09/15] composite ops boundary quantization coverage Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- tests/export/test_composite_op_externalize.py | 34 +++------ tests/export/test_graph_mode_mlir_export.py | 69 ++++++++++++------- tests/fixtures/quantization.py | 55 +++++++++++++++ 3 files changed, 110 insertions(+), 48 deletions(-) diff --git a/tests/export/test_composite_op_externalize.py b/tests/export/test_composite_op_externalize.py index b775c96..5586846 100644 --- a/tests/export/test_composite_op_externalize.py +++ b/tests/export/test_composite_op_externalize.py @@ -20,7 +20,6 @@ from coreai_opt import ExportBackend from coreai_opt.quantization import ( - ModuleQuantizerConfig, Quantizer, QuantizerConfig, ) @@ -28,10 +27,12 @@ PerTensorGranularity, QuantizationScheme, QuantizationSpec, - default_activation_quantization_spec, - default_weight_quantization_spec, ) -from tests.fixtures.quantization import make_graph_mode_ptq_config +from tests.fixtures.quantization import ( + COMPOSITE_BOUNDARY_ACT_DTYPE, + make_graph_mode_composite_boundary_config, + make_graph_mode_ptq_config, +) from tests.models.composite import ( CompositeRMSNormModel, CompositeRMSNormOnlyModel, @@ -104,15 +105,10 @@ class TestCompositeOpIOQuantization: while every other quantized edge carries the global dtype. """ - _COMPOSITE_ACT_DTYPE = torch.uint8 + _COMPOSITE_ACT_DTYPE = COMPOSITE_BOUNDARY_ACT_DTYPE @classmethod def _composite_act_spec(cls) -> QuantizationSpec: - # The composite config must use a dtype DISTINCT from the global - # (default) activation dtype: a matching dtype collapses via observer - # sharing into a vacuous no-op, so the composite's effect at the - # boundary would not be observable. - assert cls._COMPOSITE_ACT_DTYPE != default_activation_quantization_spec().dtype return QuantizationSpec( dtype=cls._COMPOSITE_ACT_DTYPE, qscheme=QuantizationScheme.SYMMETRIC, @@ -127,21 +123,11 @@ def _config( target_by: str, module_input_spec: dict | None = None, ) -> QuantizerConfig: - composite_act = cls._composite_act_spec() - global_config = ModuleQuantizerConfig( - op_state_spec={"weight": default_weight_quantization_spec()}, - op_input_spec={"*": default_activation_quantization_spec()}, - op_output_spec={"*": default_activation_quantization_spec()}, - ) - composite_config = ModuleQuantizerConfig( - module_input_spec=module_input_spec or {"*": composite_act}, - module_output_spec={"*": composite_act}, + return make_graph_mode_composite_boundary_config( + module_name=module_name if target_by == "name" else None, + module_type=spec.target_class if target_by == "type" else None, + module_input_spec=module_input_spec, ) - if target_by == "name": - scope = {"module_name_configs": {module_name: composite_config}} - else: - scope = {"module_type_configs": {spec.target_class: composite_config}} - return QuantizerConfig(global_config=global_config, execution_mode="graph", **scope) def _finalize( self, diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index c7e91f5..ea318c1 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -31,6 +31,7 @@ from tests.fixtures.fp8 import ParametrizedFP8Configs from tests.fixtures.quantization import ( ParametrizedQuantConfigs, + make_graph_mode_composite_boundary_config, make_graph_mode_ptq_config, ) from tests.models.composite import ( @@ -452,47 +453,66 @@ def test_integer_quant_minval_export( # Composite-op externalize export coverage +# (model, externalize spec, composite submodule path, expected coreai.quantize count +# per config kind) +_EXTERNALIZE_EXPORT_CASES = [ + pytest.param( + CompositeRMSNormModel, + rmsnorm_externalize_spec(), + "norm", + {"w8": 0, "w8a8": 4, "w8a8-boundary": 6}, + id="rmsnorm", + ), + pytest.param( + CompositeSDPAModel, + sdpa_externalize_spec(), + "composite", + {"w8": 0, "w8a8": 4, "w8a8-boundary": 8}, + id="sdpa", + ), +] + +@pytest.mark.parametrize("config_kind", ["w8", "w8a8", "w8a8-boundary"]) @pytest.mark.parametrize( - "quantize_activations, expected_quantize_count", - [ - pytest.param(False, 0, id="w8-weight-only"), - pytest.param(True, 4, id="w8a8"), - ], -) -@pytest.mark.parametrize( - "model_cls, externalize_spec", - [ - pytest.param(CompositeRMSNormModel, rmsnorm_externalize_spec(), id="rmsnorm"), - pytest.param(CompositeSDPAModel, sdpa_externalize_spec(), id="sdpa"), - ], + "model_cls, externalize_spec, composite_module, expected_quantize_counts", + _EXTERNALIZE_EXPORT_CASES, ) def test_composite_externalize_export( model_cls: type[torch.nn.Module], externalize_spec: ExternalizeSpec, - quantize_activations: bool, - expected_quantize_count: int, + composite_module: str, + expected_quantize_counts: Mapping[str, int], + config_kind: str, ) -> None: """End-to-end CoreAI export of a model with an externalized composite op. - Marks the composite op for externalization, runs graph-mode PTQ - (w8 weight-only or w8a8), then lowers the finalized graph to a - .aimodel and runs it. ``convert_and_verify`` handles SNR / PSNR - on the runtime output and op-count verification on the exported - program (``constexpr_blockwise_shift_scale`` for weight quantizers - and ``quantize`` / ``dequantize`` for activation quantizers). + Marks the composite op for externalization, runs graph-mode PTQ, then lowers the + finalized graph to a .aimodel and runs it. ``convert_and_verify`` handles SNR / + PSNR on the runtime output and op-count verification on the exported program + (``constexpr_blockwise_shift_scale`` for weight quantizers and ``quantize`` / + ``dequantize`` for activation quantizers). + + Three configs: + + - ``w8`` / ``w8a8``: global config only. + - ``w8a8-boundary``: adds a module-scoped ``module_input_spec`` / + ``module_output_spec`` so the composite op's i/o edges are quantized """ model = model_cls().eval().half() input_data = torch.randn(2, 4, 32, dtype=torch.float16) _patch_model_for_externalization(model, [externalize_spec]) - quantizer = Quantizer( - model, make_graph_mode_ptq_config(quantize_activations=quantize_activations) - ) + if config_kind == "w8a8-boundary": + config = make_graph_mode_composite_boundary_config(module_name=composite_module) + else: + config = make_graph_mode_ptq_config(quantize_activations=config_kind == "w8a8") + + quantizer = Quantizer(model, config) prepared_model = quantizer.prepare((input_data,)) - if quantize_activations: + if config_kind != "w8": with quantizer.calibration_mode(), torch.no_grad(): prepared_model(input_data) @@ -501,6 +521,7 @@ def test_composite_externalize_export( finalized_model = quantizer.finalize(backend=ExportBackend.CoreAI) + expected_quantize_count = expected_quantize_counts[config_kind] export_utils.convert_and_verify( finalized_model=finalized_model, input_data=input_data, diff --git a/tests/fixtures/quantization.py b/tests/fixtures/quantization.py index 58fedfe..04b2d85 100644 --- a/tests/fixtures/quantization.py +++ b/tests/fixtures/quantization.py @@ -104,6 +104,61 @@ def make_graph_mode_ptq_config(*, quantize_activations: bool) -> QuantizerConfig ) +COMPOSITE_BOUNDARY_ACT_DTYPE = torch.uint8 + + +def make_graph_mode_composite_boundary_config( + *, + module_name: str | None = None, + module_type: type | None = None, + module_input_spec: dict | None = None, +) -> QuantizerConfig: + """Build a graph-mode w8a8 config that also quantizes the composite op module's + own i/o boundary. + + Args: + module_name: Target the module at this path (``module_name_configs``). + module_type: Target modules of this type (``module_type_configs``). + Exactly one of module_name / module_type must be given. + module_input_spec: Override the boundary input spec, e.g. + ``{0: spec, 2: spec}`` to select individual positional args. + Defaults to the ``"*"`` wildcard over every boundary input. + + Returns: + QuantizerConfig: global w8a8 plus a module-scoped boundary spec. + """ + if (module_name is None) == (module_type is None): + msg = "pass exactly one of module_name / module_type" + raise ValueError(msg) + assert COMPOSITE_BOUNDARY_ACT_DTYPE != default_activation_quantization_spec().dtype + + def _boundary_spec() -> QuantizationSpec: + return QuantizationSpec( + dtype=COMPOSITE_BOUNDARY_ACT_DTYPE, + qscheme=QuantizationScheme.SYMMETRIC, + granularity=PerTensorGranularity(), + ) + + boundary_config = ModuleQuantizerConfig( + module_input_spec=module_input_spec or {"*": _boundary_spec()}, + module_output_spec={"*": _boundary_spec()}, + ) + scope = ( + {"module_name_configs": {module_name: boundary_config}} + if module_name is not None + else {"module_type_configs": {module_type: boundary_config}} + ) + return QuantizerConfig( + global_config=ModuleQuantizerConfig( + op_state_spec={"weight": default_weight_quantization_spec()}, + op_input_spec={"*": default_activation_quantization_spec()}, + op_output_spec={"*": default_activation_quantization_spec()}, + ), + execution_mode="graph", + **scope, + ) + + @dataclass class ParametrizedQuantConfigs: """Container for parametrized Eager and PT2E quantization configs. From 0f510254ed043bfc1170f4f11c5e68abb1399592 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:50:28 -0700 Subject: [PATCH 10/15] add doc page Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- docs/src/index.md | 1 + docs/src/quantization/overview.md | 2 +- docs/src/utils/composite_op_quantization.md | 242 ++++++++++++++++++++ 3 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 docs/src/utils/composite_op_quantization.md diff --git a/docs/src/index.md b/docs/src/index.md index 608cfc4..cb59743 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -42,6 +42,7 @@ utils/mixed_precision utils/activation_comparison utils/casting utils/coreai_compression +utils/composite_op_quantization ``` ```{toctree} diff --git a/docs/src/quantization/overview.md b/docs/src/quantization/overview.md index 45286f2..b4b325b 100644 --- a/docs/src/quantization/overview.md +++ b/docs/src/quantization/overview.md @@ -204,7 +204,7 @@ The two modes are expected to produce very similar models for weight-only quanti A few scenarios where `eager` mode may need to be used instead of `graph`: - If you run into any errors during the `prepare` call which, under the hood, invokes the `torch.export.export` and `torchao`'s `prepare_qat_pt2e`/`convert_pt2e` APIs. See [Graph Mode Troubleshooting](../debugging/graph_mode_troubleshooting.md) for common export errors and workarounds before falling back to eager mode. -- When `torch.nn.Module` needs to be provided as an input, instead of `ExportedProgram` to the conversion API of [coreai-torch](https://github.com/apple/coreai-torch). This happens when the `coreai-torch` conversion needs to "externalize" certain sub-modules to map them to _composite ops_ for better runtime performance. +- When `torch.nn.Module` needs to be provided as an input, instead of `ExportedProgram` to the conversion API of [coreai-torch](https://github.com/apple/coreai-torch). Note that models whose submodules must be "externalized" to map them to _composite ops_ for better runtime performance can still be quantized in graph mode. See [Quantizing Models with Core AI Composite Ops](../utils/composite_op_quantization.md). #### Weights and activations quantization diff --git a/docs/src/utils/composite_op_quantization.md b/docs/src/utils/composite_op_quantization.md new file mode 100644 index 0000000..3bd220b --- /dev/null +++ b/docs/src/utils/composite_op_quantization.md @@ -0,0 +1,242 @@ +# Quantizing Models with Core AI Composite Ops + +Core AI recognizes certain well-known building blocks, such as SDPA or RMSNorm, as _composite ops_ and applies optimized implementations for them. +`coreai-torch` establishes those boundaries through _externalization_. +Refer to the [Externalization](https://apple.github.io/coreai-torch/main/guides/externalization.html) guide for details. +Here, we will discuss the steps required to quantize a model in `graph` mode using `coreai-opt`. + +`graph`-mode quantization invokes `torch.export.export` under the hood, which decomposes a submodule's `forward` into aten ops. +In order to preserve the composite op structure during this process for externalization, the following APIs are provided: + +- `_patch_model_for_externalization`: Patch the model **before** `quantizer.prepare`, so that the composite op call sites survive export and all subsequent quantization passes as opaque nodes. +- `_subexport_and_restore`: The submodule bodies of the composite ops themselves are then exported and restored before lowering to `CoreAI`. + +Quantization treats each composite op as opaque: no fake-quantize op is placed inside the composite body. +The composite's input and output boundary can still be quantized, see [Quantizing the composite op boundary](#quantizing-the-composite-op-boundary) below for details. + +:::{warning} +The externalization APIs used below, `_patch_model_for_externalization` and `_subexport_and_restore` in `coreai-torch` are currently experimental. +::: + +```mermaid +--- +title: "Composite Op Quantization Workflow" +--- +flowchart LR + model["Full Precision
Model"] --> patch["Patch model"] + patch --> prepare["quantizer.prepare(...)"] + prepare --> calibrate["Calibrate"] + calibrate --> qfin["quantizer.finalize(...)"] + qfin --> export["torch.export.export(...)"] + export --> sub["Sub-export
and restore"] + sub --> convert["TorchConverter().to_coreai()"] + style model fill:#f9f9f9,stroke:#999 +``` + +## Step 1: Patch the model before prepare + +`_patch_model_for_externalization` replaces the `forward` of every matching submodule in the model with a `torch.library.custom_op`, in place. +Call it before constructing the `Quantizer`. +The example below uses the same `RMSNormComposite` module as an example, however, the same process applies for all composite ops with their respective `ExternalizeSpec`s. + +```python +import torch +import torch.nn as nn +from coreai_torch import ExternalizeSpec, _patch_model_for_externalization + + +# The composite op +class RMSNormComposite(nn.Module): + def __init__(self, axes=-1, eps=1e-5, version=1): + super().__init__() + self.axes = axes + self.eps = eps + self.version = version + + def forward(self, input: torch.Tensor, scale: torch.Tensor) -> torch.Tensor: + x_f32 = input.to(torch.float32) + inv_rms = torch.rsqrt((x_f32 * x_f32).mean(self.axes, keepdim=True) + self.eps) + return (input * inv_rms).to(input.dtype) * scale + + +# A model that uses the composite op +class Model(nn.Module): + def __init__(self, dim=32): + super().__init__() + self.proj = nn.Linear(dim, dim) + self.norm = RMSNormComposite() + self.norm_weight = nn.Parameter(torch.ones(dim)) + self.out = nn.Linear(dim, dim) + + def forward(self, x): + return self.out(self.norm(self.proj(x), self.norm_weight)) + + +model = Model().eval() +example_inputs = (torch.randn(1, 32),) + +# Patch the model in-place +# to externalize the RMSNormComposite +_patch_model_for_externalization( + model, + targets=[ + ExternalizeSpec( + target_class=RMSNormComposite, + composite_op_name="rms_norm", + composite_attrs=["axes", "eps", "version"], + ) + ], +) +``` + +## Step 2: Prepare, calibrate and finalize + +Nothing about the quantizer configuration or the calibration workflow changes. +The composite op holds no weights of its own here, so weight quantization applies to the surrounding `Linear` layers only. + +```python +import coreai_opt as opt +from coreai_opt.quantization import ModuleQuantizerConfig, Quantizer, QuantizerConfig +from coreai_opt.quantization.spec import ( + default_activation_quantization_spec, + default_weight_quantization_spec, +) + +global_config = ModuleQuantizerConfig( + op_state_spec={"weight": default_weight_quantization_spec()}, + op_input_spec={"*": default_activation_quantization_spec()}, + op_output_spec={"*": default_activation_quantization_spec()}, +) +quant_config = QuantizerConfig(global_config=global_config) + +quantizer = Quantizer(model, quant_config) +prepared_model = quantizer.prepare(example_inputs) + +with quantizer.calibration_mode(): + for batch in calibration_dataloader: + prepared_model(batch) + +final_model = quantizer.finalize(backend=opt.ExportBackend.CoreAI) +``` + +## Step 3: Export and convert to Core AI + +After quantization is complete and the model is finalized, `_subexport_and_restore` API exports each patched composite op and restores the original `forward` method in the model. +Note that the first argument to `_subexport_and_restore` is the original module that was patched in Step 1, not the finalized `GraphModule`. + +```python +import coreai_torch +from coreai_torch import TorchConverter, _subexport_and_restore + +exported_program = torch.export.export(final_model, example_inputs).run_decompositions( + coreai_torch.get_decomp_table() +) +externalized = _subexport_and_restore(model, exported_program) + +coreai_program = ( + TorchConverter() + .add_exported_program( + exported_program, _externalized_exported_programs=externalized + ) + .to_coreai() +) +``` + +In the Core AI graph, the composite op is emitted as a separate private graph that `@main` reaches through `coreai.invoke`: + +```text +coreai.graph private noinline @norm_57e2d4a8(%arg0: tensor<1x32xf32> {coreai.name = "input"}, %arg1: tensor<32xf32> {coreai.name = "scale"}) -> (tensor<1x32xf32>) attributes {composite_decl = ...} { + %2 = coreai.decomposable.broadcasting_mul %0, %1 : (tensor<1x32xf32>, tensor<1x32xf32>) -> tensor<1x32xf32> + %4 = coreai.reduce_mean %2, %3 : (tensor<1x32xf32>, tensor<1xsi32>) -> tensor<1x1xf32> + %8 = coreai.decomposable.broadcasting_add %6, %7 : (tensor<1x1xf32>, tensor) -> tensor<1x1xf32> + %9 = coreai.rsqrt %8 : tensor<1x1xf32> -> tensor<1x1xf32> + %12 = coreai.decomposable.broadcasting_mul %10, %11 : (tensor<1x32xf32>, tensor<1x1xf32>) -> tensor<1x32xf32> + %15 = coreai.decomposable.broadcasting_mul %13, %14 : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + coreai.output %15 : tensor<1x32xf32> +} + +coreai.graph @main(%arg0: tensor<1x32xf32> {coreai.name = "x"}) -> (tensor<1x32xf32>) { + %44 = coreai.decomposable.broadcasting_add %43, %2 : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + %53 = coreai.quantize %44, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> + %62 = coreai.dequantize %53, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + %63 = coreai.invoke @norm_57e2d4a8(%62, %0) : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + %72 = coreai.quantize %63, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> + %81 = coreai.dequantize %72, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + %84 = coreai.decomposable.broadcasting_batch_matmul %81, %83 : (tensor<1x32xf32>, tensor<32x32xf32>) -> tensor<1x32xf32> +} +``` + +(`coreai.cast`, `coreai.constant` and `coreai.reshape` ops omitted above for brevity.) + +The composite body carries no `coreai.quantize` or `coreai.dequantize` op and stays in full precision. + +## Quantizing the composite op boundary + +The `coreai.quantize` pairs surrounding the `coreai.invoke` above come from the global config. They are the output quantizer of the preceding `Linear` and the input quantizer of the following one. +The composite op boundary itself is not targeted by a global config. + +To target the boundary specifically, use `module_input_spec` and `module_output_spec` on a {class}`~coreai_opt.quantization.config.ModuleQuantizerConfig` scoped by `module_type_configs` or `module_name_configs`. + +To see this in isolation, the following example uses a model with the composite op alone and specifies a module level spec to quantize it's boundary. + +```python +from coreai_opt.quantization.spec import ( + PerTensorGranularity, + QuantizationScheme, + QuantizationSpec, +) + + +class RMSNormOnly(nn.Module): + def __init__(self, dim=32): + super().__init__() + self.norm = RMSNormComposite() + self.norm_weight = nn.Parameter(torch.ones(dim)) + + def forward(self, x): + return self.norm(x, self.norm_weight) + + +boundary_spec = QuantizationSpec( + dtype=torch.int8, + qscheme=QuantizationScheme.SYMMETRIC, + granularity=PerTensorGranularity(), +) +quant_config = QuantizerConfig( + module_type_configs={ + RMSNormComposite: ModuleQuantizerConfig( + module_input_spec={"*": boundary_spec}, + module_output_spec={"*": boundary_spec}, + ) + }, +) +``` + +Running the same patch, prepare, calibrate, finalize and convert steps as above, gives a `@main` graph containing just the boundary quantization and the composite call. + +```text +coreai.graph private noinline @norm_20ea9665(%arg0: tensor<1x32xf32> {coreai.name = "input"}, %arg1: tensor<32xf32> {coreai.name = "scale"}) -> (tensor<1x32xf32>) attributes {composite_decl = ...} { + %2 = coreai.decomposable.broadcasting_mul %0, %1 : (tensor<1x32xf32>, tensor<1x32xf32>) -> tensor<1x32xf32> + %4 = coreai.reduce_mean %2, %3 : (tensor<1x32xf32>, tensor<1xsi32>) -> tensor<1x1xf32> + %8 = coreai.decomposable.broadcasting_add %6, %7 : (tensor<1x1xf32>, tensor) -> tensor<1x1xf32> + %9 = coreai.rsqrt %8 : tensor<1x1xf32> -> tensor<1x1xf32> + %12 = coreai.decomposable.broadcasting_mul %10, %11 : (tensor<1x32xf32>, tensor<1x1xf32>) -> tensor<1x32xf32> + %15 = coreai.decomposable.broadcasting_mul %13, %14 : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + coreai.output %15 : tensor<1x32xf32> +} + +coreai.graph @main(%arg0: tensor<1x32xf32> {coreai.name = "x"}) -> (tensor<1x32xf32>) { + %13 = coreai.quantize %arg0, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> + %22 = coreai.dequantize %13, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + %23 = coreai.invoke @norm_20ea9665(%22, %0) : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + %32 = coreai.quantize %23, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> + %41 = coreai.dequantize %32, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + coreai.output %41 : tensor<1x32xf32> +} +``` + +(`coreai.cast`, `coreai.constant` and `coreai.reshape` ops omitted above for brevity.) + +## Notes + +- The same set of APIs and workflows can be followed for Quantization Aware Training in `graph` mode as well. From 8d66ed1d07df938d4e0c5f3dbacf836f466e8ca7 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:59:56 -0700 Subject: [PATCH 11/15] update flowchart Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- docs/src/quantization/overview.md | 2 +- docs/src/utils/composite_op_quantization.md | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/src/quantization/overview.md b/docs/src/quantization/overview.md index b4b325b..753a539 100644 --- a/docs/src/quantization/overview.md +++ b/docs/src/quantization/overview.md @@ -204,7 +204,7 @@ The two modes are expected to produce very similar models for weight-only quanti A few scenarios where `eager` mode may need to be used instead of `graph`: - If you run into any errors during the `prepare` call which, under the hood, invokes the `torch.export.export` and `torchao`'s `prepare_qat_pt2e`/`convert_pt2e` APIs. See [Graph Mode Troubleshooting](../debugging/graph_mode_troubleshooting.md) for common export errors and workarounds before falling back to eager mode. -- When `torch.nn.Module` needs to be provided as an input, instead of `ExportedProgram` to the conversion API of [coreai-torch](https://github.com/apple/coreai-torch). Note that models whose submodules must be "externalized" to map them to _composite ops_ for better runtime performance can still be quantized in graph mode. See [Quantizing Models with Core AI Composite Ops](../utils/composite_op_quantization.md). +- When `torch.nn.Module` needs to be provided as an input, instead of `ExportedProgram` to the conversion API of [coreai-torch](https://github.com/apple/coreai-torch). Note that models whose submodules must be "externalized" to map them to _composite ops_ for better runtime performance can still be quantized in graph mode. See [Quantizing Models with Core AI Composite Ops in Graph Mode](../utils/composite_op_quantization.md). #### Weights and activations quantization diff --git a/docs/src/utils/composite_op_quantization.md b/docs/src/utils/composite_op_quantization.md index 3bd220b..a13fff6 100644 --- a/docs/src/utils/composite_op_quantization.md +++ b/docs/src/utils/composite_op_quantization.md @@ -1,4 +1,4 @@ -# Quantizing Models with Core AI Composite Ops +# Quantizing Models with Core AI Composite Ops in Graph Mode Core AI recognizes certain well-known building blocks, such as SDPA or RMSNorm, as _composite ops_ and applies optimized implementations for them. `coreai-torch` establishes those boundaries through _externalization_. @@ -20,17 +20,17 @@ The externalization APIs used below, `_patch_model_for_externalization` and `_su ```mermaid --- -title: "Composite Op Quantization Workflow" +title: "Graph mode Quantization Workflow with Externalization" --- flowchart LR - model["Full Precision
Model"] --> patch["Patch model"] - patch --> prepare["quantizer.prepare(...)"] - prepare --> calibrate["Calibrate"] - calibrate --> qfin["quantizer.finalize(...)"] - qfin --> export["torch.export.export(...)"] - export --> sub["Sub-export
and restore"] - sub --> convert["TorchConverter().to_coreai()"] + model["Full Precision
Model"] --> patch["Patch Model for
Externalization"] + patch --> prepare["Prepare and
Calibrate"] + prepare --> qfin["Finalize and
Export"] + qfin --> sub["Sub-export
and Restore"] + sub --> convert["Convert to
Core AI"] style model fill:#f9f9f9,stroke:#999 + style patch fill:#e8f0fe,stroke:#4285f4 + style sub fill:#e8f0fe,stroke:#4285f4 ``` ## Step 1: Patch the model before prepare @@ -239,4 +239,4 @@ coreai.graph @main(%arg0: tensor<1x32xf32> {coreai.name = "x"}) -> (tensor<1x32x ## Notes -- The same set of APIs and workflows can be followed for Quantization Aware Training in `graph` mode as well. +- The same set of APIs and steps apply for Quantization Aware Training in `graph` mode as well. From 7ec5d63c59e0363546dc651df8ea65bfe2b80fcc Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Wed, 12 Aug 2026 14:30:33 -0700 Subject: [PATCH 12/15] address review comments Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- tests/export/export_utils.py | 27 +++- tests/export/test_graph_mode_mlir_export.py | 51 ++++---- tests/fixtures/quantization.py | 65 +++++----- tests/models/composite.py | 38 ------ .../test_composite_op_externalize.py | 119 +++++++++++------- .../test_graph_mode_quantizer_mnist.py | 2 +- tests/test_utils/general.py | 12 +- 7 files changed, 146 insertions(+), 168 deletions(-) rename tests/{export => quantization}/test_composite_op_externalize.py (73%) diff --git a/tests/export/export_utils.py b/tests/export/export_utils.py index 9e20533..9a5e054 100644 --- a/tests/export/export_utils.py +++ b/tests/export/export_utils.py @@ -436,13 +436,13 @@ def convert( self, traced_model: torch.export.ExportedProgram, input_data: torch.Tensor, - externalize_model: Any = None, + externalized_model: Any = None, **kwargs: Any, ) -> AIProgram: _, _ = input_data, kwargs coreai_program = self._lower_to_coreai( traced_model, - externalize_model=externalize_model, + externalized_model=externalized_model, ) assert type(coreai_program) is AIProgram @@ -530,19 +530,19 @@ def _verify_custom_ops_in_torch_program( @staticmethod def _lower_to_coreai( exported_program: torch.export.ExportedProgram, - externalize_model: Any = None, + externalized_model: Any = None, ) -> AIProgram: """Lower exported program to Core AI. Args: exported_program: The exported program to lower. - externalize_model: Optional ``torch.nn.Module`` that was marked in + externalized_model: Optional ``torch.nn.Module`` that was marked in place by ``coreai_torch._patch_model_for_externalization``. """ converter = coreai_torch.TorchConverter() externalized_exported_programs = ( - coreai_torch._subexport_and_restore(externalize_model, exported_program) - if externalize_model is not None + coreai_torch._subexport_and_restore(externalized_model, exported_program) + if externalized_model is not None else None ) converter.add_exported_program( @@ -573,6 +573,7 @@ def convert_and_verify( expected_ops: Mapping[str, int], export_backend: ExportBackend, prepared_model_output: torch.Tensor | tuple[torch.Tensor, ...], + externalized_model: torch.nn.Module | None = None, snr_thresh: float = 20.0, psnr_thresh: float = 22.0, skip_finalized_model_verify: bool = False, @@ -587,6 +588,9 @@ def convert_and_verify( export_backend: Target inference stack (CoreML or CoreAI) prepared_model_output: Pre-computed reference output from the prepared PyTorch model (single tensor or tuple). + externalized_model: Optional ``torch.nn.Module`` that was patched in place by + ``coreai_torch._patch_model_for_externalization``. Only supported by the + CoreAI backend; passing it for any other backend raises ValueError. snr_thresh: Minimum acceptable SNR value psnr_thresh: Minimum acceptable PSNR value skip_finalized_model_verify: If True, skip forward pass verification on @@ -597,9 +601,20 @@ def convert_and_verify( Returns: The converted model in the specified format + Raises: + ValueError: If externalized_model is given for a non-CoreAI backend. + """ converter = create_converter(export_backend) + if externalized_model is not None: + if export_backend is not ExportBackend.CoreAI: + msg = ( + f"externalized_model is only supported by the CoreAI backend, got {export_backend}" + ) + raise ValueError(msg) + converter_kwargs["externalized_model"] = externalized_model + # Run finalized model forward pass BEFORE tracing. torch.export.export() # (called in trace) may mutate the model (e.g., strip parametrizations on # older PyTorch versions), so the forward pass must happen first. diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index ea318c1..05a31a9 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -31,13 +31,11 @@ from tests.fixtures.fp8 import ParametrizedFP8Configs from tests.fixtures.quantization import ( ParametrizedQuantConfigs, - make_graph_mode_composite_boundary_config, - make_graph_mode_ptq_config, + make_graph_mode_module_boundary_config, + make_quant_config, ) from tests.models.composite import ( - CompositeRMSNormModel, CompositeSDPAModel, - rmsnorm_externalize_spec, sdpa_externalize_spec, ) @@ -453,30 +451,21 @@ def test_integer_quant_minval_export( # Composite-op externalize export coverage -# (model, externalize spec, composite submodule path, expected coreai.quantize count -# per config kind) -_EXTERNALIZE_EXPORT_CASES = [ - pytest.param( - CompositeRMSNormModel, - rmsnorm_externalize_spec(), - "norm", - {"w8": 0, "w8a8": 4, "w8a8-boundary": 6}, - id="rmsnorm", - ), - pytest.param( - CompositeSDPAModel, - sdpa_externalize_spec(), - "composite", - {"w8": 0, "w8a8": 4, "w8a8-boundary": 8}, - id="sdpa", - ), -] - @pytest.mark.parametrize("config_kind", ["w8", "w8a8", "w8a8-boundary"]) @pytest.mark.parametrize( + # (model, externalize spec, composite submodule path, expected coreai.quantize + # count per config kind) "model_cls, externalize_spec, composite_module, expected_quantize_counts", - _EXTERNALIZE_EXPORT_CASES, + [ + pytest.param( + CompositeSDPAModel, + sdpa_externalize_spec(), + "composite", + {"w8": 0, "w8a8": 4, "w8a8-boundary": 8}, + id="sdpa", + ), + ], ) def test_composite_externalize_export( model_cls: type[torch.nn.Module], @@ -505,9 +494,17 @@ def test_composite_externalize_export( _patch_model_for_externalization(model, [externalize_spec]) if config_kind == "w8a8-boundary": - config = make_graph_mode_composite_boundary_config(module_name=composite_module) + # uint8 boundary edges stay distinguishable from the int8 global ones. + config = make_graph_mode_module_boundary_config( + module_boundary_dtype=torch.uint8, + module_name=composite_module, + ) else: - config = make_graph_mode_ptq_config(quantize_activations=config_kind == "w8a8") + config = make_quant_config( + weight_dtype=torch.int8, + act_dtype=torch.int8 if config_kind == "w8a8" else None, + execution_mode="graph", + ) quantizer = Quantizer(model, config) prepared_model = quantizer.prepare((input_data,)) @@ -532,5 +529,5 @@ def test_composite_externalize_export( }, export_backend=ExportBackend.CoreAI, prepared_model_output=prepared_model_output, - externalize_model=model, + externalized_model=model, ) diff --git a/tests/fixtures/quantization.py b/tests/fixtures/quantization.py index 04b2d85..21de857 100644 --- a/tests/fixtures/quantization.py +++ b/tests/fixtures/quantization.py @@ -19,8 +19,6 @@ PerTensorGranularity, QuantizationScheme, QuantizationSpec, - default_activation_quantization_spec, - default_weight_quantization_spec, ) from coreai_opt.quantization.spec.fake_quantize import _DefaultFakeQuantizeImpl from coreai_opt.quantization.spec.qparams_calculator import StaticQParamsCalculator @@ -83,58 +81,52 @@ def _spec(dtype: torch.dtype | str) -> QuantizationSpec: ) -def make_graph_mode_ptq_config(*, quantize_activations: bool) -> QuantizerConfig: - """Build a graph-mode w8 (weight-only) or w8a8 PTQ QuantizerConfig. - - Args: - quantize_activations (bool): True for w8a8, False for w8 weight-only. - - Returns: - QuantizerConfig: Config with the default weight spec globally, plus the - default activation spec on every op input/output when requested. - """ - activation_spec = default_activation_quantization_spec() if quantize_activations else None - return QuantizerConfig( - global_config=ModuleQuantizerConfig( - op_state_spec={"weight": default_weight_quantization_spec()}, - op_input_spec={"*": activation_spec} if activation_spec else None, - op_output_spec={"*": activation_spec} if activation_spec else None, - ), - execution_mode="graph", - ) - - -COMPOSITE_BOUNDARY_ACT_DTYPE = torch.uint8 - - -def make_graph_mode_composite_boundary_config( +def make_graph_mode_module_boundary_config( *, + module_boundary_dtype: torch.dtype, module_name: str | None = None, module_type: type | None = None, module_input_spec: dict | None = None, + global_dtype: torch.dtype = torch.int8, ) -> QuantizerConfig: - """Build a graph-mode w8a8 config that also quantizes the composite op module's - own i/o boundary. + """Build a graph-mode config that also quantizes one module's own i/o boundary. + + The global part comes from ``make_quant_config``; this adds a module-scoped + ``module_input_spec`` / ``module_output_spec`` on top of it. Args: + module_boundary_dtype: Activation dtype for the boundary spec. Must differ + from global_dtype, otherwise the boundary and global observers share a + dtype and the config no longer proves the module scope outranks global. module_name: Target the module at this path (``module_name_configs``). module_type: Target modules of this type (``module_type_configs``). Exactly one of module_name / module_type must be given. module_input_spec: Override the boundary input spec, e.g. ``{0: spec, 2: spec}`` to select individual positional args. Defaults to the ``"*"`` wildcard over every boundary input. + global_dtype: Weight and activation dtype for the global config. Returns: - QuantizerConfig: global w8a8 plus a module-scoped boundary spec. + QuantizerConfig: the global config plus a module-scoped boundary spec. + + Raises: + ValueError: If not exactly one of module_name / module_type is given, or if + module_boundary_dtype matches global_dtype. """ if (module_name is None) == (module_type is None): msg = "pass exactly one of module_name / module_type" raise ValueError(msg) - assert COMPOSITE_BOUNDARY_ACT_DTYPE != default_activation_quantization_spec().dtype + if module_boundary_dtype == global_dtype: + msg = ( + f"module_boundary_dtype {module_boundary_dtype} must differ from the " + f"global dtype {global_dtype}, otherwise the boundary edges are " + "indistinguishable from the globally quantized ones" + ) + raise ValueError(msg) def _boundary_spec() -> QuantizationSpec: return QuantizationSpec( - dtype=COMPOSITE_BOUNDARY_ACT_DTYPE, + dtype=module_boundary_dtype, qscheme=QuantizationScheme.SYMMETRIC, granularity=PerTensorGranularity(), ) @@ -148,12 +140,11 @@ def _boundary_spec() -> QuantizationSpec: if module_name is not None else {"module_type_configs": {module_type: boundary_config}} ) + base = make_quant_config( + weight_dtype=global_dtype, act_dtype=global_dtype, execution_mode="graph" + ) return QuantizerConfig( - global_config=ModuleQuantizerConfig( - op_state_spec={"weight": default_weight_quantization_spec()}, - op_input_spec={"*": default_activation_quantization_spec()}, - op_output_spec={"*": default_activation_quantization_spec()}, - ), + global_config=base.global_config, execution_mode="graph", **scope, ) diff --git a/tests/models/composite.py b/tests/models/composite.py index f617e4e..44ea1fc 100644 --- a/tests/models/composite.py +++ b/tests/models/composite.py @@ -13,9 +13,6 @@ import torch.nn.functional as F _DIM = 32 -_HIDDEN = 64 -_SEQ = 4 -_BATCH = 2 # Externalize specs shared by the externalization test modules. @@ -45,41 +42,6 @@ def sdpa_externalize_spec(): ) -class CompositeRMSNormModel(nn.Module): - """Linear -> RMSNormImpl (composite) -> Linear over rank-3 activations.""" - - def __init__( - self, - dim: int = _DIM, - hidden: int = _HIDDEN, - eps: float = 1e-5, - ) -> None: - from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 - - super().__init__() - self.up = nn.Linear(dim, hidden, bias=False) - self.norm = RMSNormImpl(eps=eps) - self.scale = nn.Parameter(torch.ones(hidden)) - self.down = nn.Linear(hidden, dim, bias=False) - - def forward(self, x: torch.Tensor) -> torch.Tensor: - h = self.up(x) - h = self.norm(h, self.scale) - return self.down(h) - - -@pytest.fixture -def composite_rmsnorm_model() -> CompositeRMSNormModel: - """Eval-half model with a single RMSNormImpl composite op.""" - return CompositeRMSNormModel().eval().half() - - -@pytest.fixture -def composite_rmsnorm_input() -> torch.Tensor: - """Rank-3 fp16 sample input matching CompositeRMSNormModel's shapes.""" - return torch.randn(_BATCH, _SEQ, _DIM, dtype=torch.float16) - - class MNISTCompositeRMSNormModel(nn.Module): """Tiny MNIST classifier with an embedded RMSNormImpl composite op. diff --git a/tests/export/test_composite_op_externalize.py b/tests/quantization/test_composite_op_externalize.py similarity index 73% rename from tests/export/test_composite_op_externalize.py rename to tests/quantization/test_composite_op_externalize.py index 5586846..fa95099 100644 --- a/tests/export/test_composite_op_externalize.py +++ b/tests/quantization/test_composite_op_externalize.py @@ -29,12 +29,10 @@ QuantizationSpec, ) from tests.fixtures.quantization import ( - COMPOSITE_BOUNDARY_ACT_DTYPE, - make_graph_mode_composite_boundary_config, - make_graph_mode_ptq_config, + make_graph_mode_module_boundary_config, + make_quant_config, ) from tests.models.composite import ( - CompositeRMSNormModel, CompositeRMSNormOnlyModel, CompositeSDPAModel, rmsnorm_externalize_spec, @@ -47,9 +45,6 @@ is_coreai_quantize, ) -_RMSNORM_SPEC = rmsnorm_externalize_spec() -_SDPA_SPEC = sdpa_externalize_spec() - @pytest.mark.parametrize( "quantize_activations", @@ -59,22 +54,25 @@ ], ) def test_composite_op_survives_prepare_and_finalize( - composite_rmsnorm_model, - composite_rmsnorm_input, quantize_activations: bool, ) -> None: """The externalized composite must remain a single opaque call_function node end-to-end, under both w8 and w8a8. """ - model = composite_rmsnorm_model - sample = composite_rmsnorm_input + model = CompositeSDPAModel().eval().half() + sample = torch.randn(2, 4, 32, dtype=torch.float16) - _patch_model_for_externalization(model, [_RMSNORM_SPEC]) - op_name = model.norm._externalize_op_name + _patch_model_for_externalization(model, [sdpa_externalize_spec()]) + op_name = model.composite._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" quantizer = Quantizer( - model, make_graph_mode_ptq_config(quantize_activations=quantize_activations) + model, + make_quant_config( + weight_dtype=torch.int8, + act_dtype=torch.int8 if quantize_activations else None, + execution_mode="graph", + ), ) prepared = quantizer.prepare((sample,)) assert_single_call_function_node(prepared, target_substr, stage="prepared") @@ -85,45 +83,36 @@ def test_composite_op_survives_prepare_and_finalize( # Composite op I/O boundary quantization -# (model class, externalize spec, submodule attribute name, tensor input count). -# All three models default to dim=32 and accept the same rank-3 fp16 sample. -_BOUNDARY_CASES = [ - pytest.param(CompositeRMSNormOnlyModel, _RMSNORM_SPEC, "norm", 1, id="rmsnorm-only"), - pytest.param(CompositeRMSNormModel, _RMSNORM_SPEC, "norm", 1, id="rmsnorm-mixed"), - pytest.param(CompositeSDPAModel, _SDPA_SPEC, "composite", 3, id="sdpa-qkv"), -] - class TestCompositeOpIOQuantization: """Ensure externalized composite's I/O boundary can be quantized via a module-level config, by name and by type. A global config quantizes the rest of the model with the default activation - dtype (int8) and the composite config provides a distinct - ``_COMPOSITE_ACT_DTYPE`` (uint8) on the composite's edges. Module config - outranks global, so the composite boundary must carry the composite dtype - while every other quantized edge carries the global dtype. + dtype (int8) and the composite config provides a distinct boundary dtype + (uint8) on the composite's edges. Module config outranks global, so the + composite boundary must carry the composite dtype while every other quantized + edge carries the global dtype. """ - _COMPOSITE_ACT_DTYPE = COMPOSITE_BOUNDARY_ACT_DTYPE - - @classmethod - def _composite_act_spec(cls) -> QuantizationSpec: + @staticmethod + def _composite_act_spec(boundary_dtype: torch.dtype) -> QuantizationSpec: return QuantizationSpec( - dtype=cls._COMPOSITE_ACT_DTYPE, + dtype=boundary_dtype, qscheme=QuantizationScheme.SYMMETRIC, granularity=PerTensorGranularity(), ) - @classmethod + @staticmethod def _config( - cls, spec: ExternalizeSpec, module_name: str, target_by: str, + boundary_dtype: torch.dtype, module_input_spec: dict | None = None, ) -> QuantizerConfig: - return make_graph_mode_composite_boundary_config( + return make_graph_mode_module_boundary_config( + module_boundary_dtype=boundary_dtype, module_name=module_name if target_by == "name" else None, module_type=spec.target_class if target_by == "type" else None, module_input_spec=module_input_spec, @@ -136,13 +125,17 @@ def _finalize( spec: ExternalizeSpec, module_name: str, target_by: str, + boundary_dtype: torch.dtype, module_input_spec: dict | None = None, ) -> tuple[torch.fx.GraphModule, str]: _patch_model_for_externalization(model, [spec]) op_name = model.get_submodule(module_name)._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" - quantizer = Quantizer(model, self._config(spec, module_name, target_by, module_input_spec)) + quantizer = Quantizer( + model, + self._config(spec, module_name, target_by, boundary_dtype, module_input_spec), + ) prepared = quantizer.prepare((sample,)) assert_single_call_function_node(prepared, target_substr, stage="prepared") @@ -155,6 +148,7 @@ def _assert_boundary_quantized( finalized: torch.fx.GraphModule, target_substr: str, num_tensor_inputs: int, + boundary_dtype: torch.dtype, ) -> None: composite = assert_single_call_function_node(finalized, target_substr, stage="finalized") @@ -171,22 +165,42 @@ def _assert_boundary_quantized( ) for act_input in tensor_inputs: assert is_coreai_dequantize(act_input.target) - assert get_quantize_dtype(act_input.args[0]) == self._COMPOSITE_ACT_DTYPE + assert get_quantize_dtype(act_input.args[0]) == boundary_dtype users = list(composite.users) assert len(users) == 1 assert is_coreai_quantize(users[0].target) - assert get_quantize_dtype(users[0]) == self._COMPOSITE_ACT_DTYPE + assert get_quantize_dtype(users[0]) == boundary_dtype composite_dtype_quant = [ n for n in finalized.graph.nodes - if is_coreai_quantize(n.target) and get_quantize_dtype(n) == self._COMPOSITE_ACT_DTYPE + if is_coreai_quantize(n.target) and get_quantize_dtype(n) == boundary_dtype ] assert len(composite_dtype_quant) == num_tensor_inputs + 1 @pytest.mark.parametrize("target_by", ["name", "type"]) - @pytest.mark.parametrize("model_cls, spec, module_name, num_tensor_inputs", _BOUNDARY_CASES) + @pytest.mark.parametrize( + # (model class, externalize spec, submodule attribute name, tensor input count). + # Both models default to dim=32 and accept the same rank-3 fp16 sample. + "model_cls, spec, module_name, num_tensor_inputs", + [ + pytest.param( + CompositeRMSNormOnlyModel, + rmsnorm_externalize_spec(), + "norm", + 1, + id="rmsnorm-only", + ), + pytest.param( + CompositeSDPAModel, + sdpa_externalize_spec(), + "composite", + 3, + id="sdpa-qkv", + ), + ], + ) def test_composite_boundary_quantized( self, model_cls: type[nn.Module], @@ -195,20 +209,26 @@ def test_composite_boundary_quantized( num_tensor_inputs: int, target_by: str, ) -> None: + # uint8 boundary edges stay distinguishable from the int8 global ones. + boundary_dtype = torch.uint8 model = model_cls().eval().half() sample = torch.randn(2, 4, 32, dtype=torch.float16) - finalized, target_substr = self._finalize(model, sample, spec, module_name, target_by) - self._assert_boundary_quantized(finalized, target_substr, num_tensor_inputs) + finalized, target_substr = self._finalize( + model, sample, spec, module_name, target_by, boundary_dtype + ) + self._assert_boundary_quantized(finalized, target_substr, num_tensor_inputs, boundary_dtype) @pytest.mark.parametrize("target_by", ["name", "type"]) def test_composite_boundary_input_index_selects_those_args(self, target_by: str) -> None: """Integer keys in ``module_input_spec`` quantize exactly those positional args for composite ops. - The unselected input is left unquantized rather than falling + The unselected input is left unquantized rather than falling back to the global spec, because the composite is opaque to the op-pattern annotator and only a module-level config reaches its edges. """ + # uint8 boundary edges stay distinguishable from the int8 global ones. + boundary_dtype = torch.uint8 quantized_indices = (0, 2) num_tensor_inputs = 3 model = CompositeSDPAModel().eval().half() @@ -217,10 +237,13 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) finalized, target_substr = self._finalize( model, sample, - _SDPA_SPEC, + sdpa_externalize_spec(), "composite", target_by, - module_input_spec={i: self._composite_act_spec() for i in quantized_indices}, + boundary_dtype, + module_input_spec={ + i: self._composite_act_spec(boundary_dtype) for i in quantized_indices + }, ) composite = assert_single_call_function_node(finalized, target_substr, stage="finalized") @@ -239,9 +262,9 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) f"a dequantize: {act_input.target}" ) input_dtype = get_quantize_dtype(act_input.args[0]) - assert input_dtype == self._COMPOSITE_ACT_DTYPE, ( + assert input_dtype == boundary_dtype, ( f"input {index} was selected by module_input_spec but is quantized as " - f"{input_dtype}, expected the composite dtype {self._COMPOSITE_ACT_DTYPE}" + f"{input_dtype}, expected the composite dtype {boundary_dtype}" ) else: assert not is_coreai_dequantize(act_input.target), ( @@ -261,7 +284,7 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) f"the composite's consumer is not a quantize node: {consumer.target}" ) consumer_dtype = get_quantize_dtype(consumer) - assert consumer_dtype == self._COMPOSITE_ACT_DTYPE, ( + assert consumer_dtype == boundary_dtype, ( f"the composite's output is quantized as {consumer_dtype}, expected the " - f"composite dtype {self._COMPOSITE_ACT_DTYPE}" + f"composite dtype {boundary_dtype}" ) diff --git a/tests/quantization/test_graph_mode_quantizer_mnist.py b/tests/quantization/test_graph_mode_quantizer_mnist.py index 46437ea..a23b5fc 100644 --- a/tests/quantization/test_graph_mode_quantizer_mnist.py +++ b/tests/quantization/test_graph_mode_quantizer_mnist.py @@ -423,5 +423,5 @@ def test_weight_and_activation_qat_mnist_with_externalized_composite( }, export_backend=ExportBackend.CoreAI, prepared_model_output=prepared_for_export_output, - externalize_model=model, + externalized_model=model, ) diff --git a/tests/test_utils/general.py b/tests/test_utils/general.py index 4dc9c5e..6a42f42 100644 --- a/tests/test_utils/general.py +++ b/tests/test_utils/general.py @@ -71,7 +71,6 @@ def compute_snr_psnr( Returns: Tuple of (SNR, PSNR) values - """ assert len(data) == len(reference), f"Tensor length mismatch: {len(data)} vs {len(reference)}" @@ -137,7 +136,6 @@ def assert_single_call_function_node( Returns: The single matching node - """ matches = [ n for n in gm.graph.nodes if n.op == "call_function" and target_substr in str(n.target) @@ -161,13 +159,5 @@ def is_coreai_dequantize(target: object) -> bool: def get_quantize_dtype(node: torch.fx.Node) -> torch.dtype | None: - """Return the quantized dtype carried in an FX node's args, else None. - - Args: - node: The FX node to inspect - - Returns: - The first ``torch.dtype`` positional arg, or None if there is none - - """ + """Return the quantized dtype carried in an FX node's args, else None.""" return next((a for a in node.args if isinstance(a, torch.dtype)), None) From 95d1822db9a0bda1582c6316fcc59c95b6adef6b Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:42:34 -0700 Subject: [PATCH 13/15] nit Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- tests/export/export_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/export/export_utils.py b/tests/export/export_utils.py index 9a5e054..5203702 100644 --- a/tests/export/export_utils.py +++ b/tests/export/export_utils.py @@ -590,7 +590,7 @@ def convert_and_verify( PyTorch model (single tensor or tuple). externalized_model: Optional ``torch.nn.Module`` that was patched in place by ``coreai_torch._patch_model_for_externalization``. Only supported by the - CoreAI backend; passing it for any other backend raises ValueError. + CoreAI backend. snr_thresh: Minimum acceptable SNR value psnr_thresh: Minimum acceptable PSNR value skip_finalized_model_verify: If True, skip forward pass verification on From 8759dc7c343507c94d52a721667183eaacf79eab Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 13 Aug 2026 08:58:32 -0700 Subject: [PATCH 14/15] doc Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- docs/src/utils/composite_op_quantization.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/src/utils/composite_op_quantization.md b/docs/src/utils/composite_op_quantization.md index a13fff6..5978792 100644 --- a/docs/src/utils/composite_op_quantization.md +++ b/docs/src/utils/composite_op_quantization.md @@ -11,7 +11,7 @@ In order to preserve the composite op structure during this process for external - `_patch_model_for_externalization`: Patch the model **before** `quantizer.prepare`, so that the composite op call sites survive export and all subsequent quantization passes as opaque nodes. - `_subexport_and_restore`: The submodule bodies of the composite ops themselves are then exported and restored before lowering to `CoreAI`. -Quantization treats each composite op as opaque: no fake-quantize op is placed inside the composite body. +Quantization treats each composite op as opaque, i.e., no fake-quantize op is placed inside the composite body. The composite's input and output boundary can still be quantized, see [Quantizing the composite op boundary](#quantizing-the-composite-op-boundary) below for details. :::{warning} @@ -37,7 +37,7 @@ flowchart LR `_patch_model_for_externalization` replaces the `forward` of every matching submodule in the model with a `torch.library.custom_op`, in place. Call it before constructing the `Quantizer`. -The example below uses the same `RMSNormComposite` module as an example, however, the same process applies for all composite ops with their respective `ExternalizeSpec`s. +The example below demonstrates this using the same `RMSNormComposite` op from the [Externalization](https://apple.github.io/coreai-torch/main/guides/externalization.html) guide, however, the same process applies for all composite ops with their respective `ExternalizeSpec`s. ```python import torch @@ -145,6 +145,7 @@ coreai_program = ( In the Core AI graph, the composite op is emitted as a separate private graph that `@main` reaches through `coreai.invoke`: ```text +// composite op body coreai.graph private noinline @norm_57e2d4a8(%arg0: tensor<1x32xf32> {coreai.name = "input"}, %arg1: tensor<32xf32> {coreai.name = "scale"}) -> (tensor<1x32xf32>) attributes {composite_decl = ...} { %2 = coreai.decomposable.broadcasting_mul %0, %1 : (tensor<1x32xf32>, tensor<1x32xf32>) -> tensor<1x32xf32> %4 = coreai.reduce_mean %2, %3 : (tensor<1x32xf32>, tensor<1xsi32>) -> tensor<1x1xf32> @@ -159,6 +160,8 @@ coreai.graph @main(%arg0: tensor<1x32xf32> {coreai.name = "x"}) -> (tensor<1x32x %44 = coreai.decomposable.broadcasting_add %43, %2 : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> %53 = coreai.quantize %44, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> %62 = coreai.dequantize %53, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + + // externalized composite op invocation %63 = coreai.invoke @norm_57e2d4a8(%62, %0) : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> %72 = coreai.quantize %63, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> %81 = coreai.dequantize %72, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> @@ -173,7 +176,7 @@ The composite body carries no `coreai.quantize` or `coreai.dequantize` op and st ## Quantizing the composite op boundary The `coreai.quantize` pairs surrounding the `coreai.invoke` above come from the global config. They are the output quantizer of the preceding `Linear` and the input quantizer of the following one. -The composite op boundary itself is not targeted by a global config. +The composite op boundary itself is not targeted by the global config. To target the boundary specifically, use `module_input_spec` and `module_output_spec` on a {class}`~coreai_opt.quantization.config.ModuleQuantizerConfig` scoped by `module_type_configs` or `module_name_configs`. @@ -226,9 +229,15 @@ coreai.graph private noinline @norm_20ea9665(%arg0: tensor<1x32xf32> {coreai.nam } coreai.graph @main(%arg0: tensor<1x32xf32> {coreai.name = "x"}) -> (tensor<1x32xf32>) { + + // Input boundary quantizers for the composite op %13 = coreai.quantize %arg0, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> %22 = coreai.dequantize %13, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> + + // externalized composite op invocation %23 = coreai.invoke @norm_20ea9665(%22, %0) : (tensor<1x32xf32>, tensor<32xf32>) -> tensor<1x32xf32> + + // Output boundary quantizers for the composite op %32 = coreai.quantize %23, ... : (tensor<1x32xf32>, ...) -> tensor<1x32xsi8> %41 = coreai.dequantize %32, ... : (tensor<1x32xsi8>, ...) -> tensor<1x32xf32> coreai.output %41 : tensor<1x32xf32> From 4f4abf09a187deab19d127298474db9cebfede46 Mon Sep 17 00:00:00 2001 From: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:35:27 -0700 Subject: [PATCH 15/15] address review comments Signed-off-by: Prathamesh Mandke <46148373+pkmandke@users.noreply.github.com> --- ...site_rmsnorm_pretrained_1epoch_08132026.pt | Bin 0 -> 410802 bytes tests/export/test_graph_mode_mlir_export.py | 31 ++++++------- tests/fixtures/quantization.py | 14 +----- tests/models/composite.py | 43 ++++++------------ .../test_composite_op_externalize.py | 36 +++++++++------ 5 files changed, 52 insertions(+), 72 deletions(-) create mode 100644 tests/_test_artifacts/mnist/mnist_composite_rmsnorm_pretrained_1epoch_08132026.pt diff --git a/tests/_test_artifacts/mnist/mnist_composite_rmsnorm_pretrained_1epoch_08132026.pt b/tests/_test_artifacts/mnist/mnist_composite_rmsnorm_pretrained_1epoch_08132026.pt new file mode 100644 index 0000000000000000000000000000000000000000..b707e36742aadb185b992757e8ddb4fff1b4ba9a GIT binary patch literal 410802 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 z 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 z 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
    )}? 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 z zYUB^<2F$>^k=I}vbqCHr-pX%Qy3L&1_X1uxa||}0KE^CQl3gP%MJFqJ(& =;K~4 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⋙P+acwpG3e92N_!|hDVn|wtgUE_r6|z90 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 Y|FyhK^N{|J7YbquVt>8=f4%qr17@I?9{>OV literal 0 HcmV?d00001 diff --git a/tests/export/test_graph_mode_mlir_export.py b/tests/export/test_graph_mode_mlir_export.py index 05a31a9..7de0585 100644 --- a/tests/export/test_graph_mode_mlir_export.py +++ b/tests/export/test_graph_mode_mlir_export.py @@ -48,6 +48,8 @@ def _run_graph_mode_mlir_export_test_ex( config: QuantizerConfig, expected_ops: Mapping[str, int], model_dtype: torch.dtype | None = None, + calibrate: bool = False, + externalized_model: torch.nn.Module | None = None, ) -> None: """Run graph-mode Core AI export test with expanded configuration parameters. @@ -57,6 +59,10 @@ def _run_graph_mode_mlir_export_test_ex( config: graph-mode quantization configuration model_dtype: Model dtype (float16, float32, bfloat16, or None for no conversion) expected_ops: Expected operation counts in converted model + calibrate: If True, run one calibration pass under + ``quantizer.calibration_mode()`` before the reference forward. + externalized_model: The model patched in place by + ``coreai_torch._patch_model_for_externalization``. """ if model_dtype is not None: model = model.to(dtype=model_dtype) @@ -66,6 +72,10 @@ def _run_graph_mode_mlir_export_test_ex( quantizer = Quantizer(model, config) prepared_model = quantizer.prepare((input_data,)) + if calibrate: + with quantizer.calibration_mode(), torch.no_grad(): + prepared_model(input_data) + with torch.no_grad(): prepared_model_output = prepared_model(input_data) @@ -77,6 +87,7 @@ def _run_graph_mode_mlir_export_test_ex( expected_ops=expected_ops, export_backend=ExportBackend.CoreAI, prepared_model_output=prepared_model_output, + externalized_model=externalized_model, ) @@ -506,28 +517,16 @@ def test_composite_externalize_export( execution_mode="graph", ) - quantizer = Quantizer(model, config) - prepared_model = quantizer.prepare((input_data,)) - - if config_kind != "w8": - with quantizer.calibration_mode(), torch.no_grad(): - prepared_model(input_data) - - with torch.no_grad(): - prepared_model_output = prepared_model(input_data) - - finalized_model = quantizer.finalize(backend=ExportBackend.CoreAI) - expected_quantize_count = expected_quantize_counts[config_kind] - export_utils.convert_and_verify( - finalized_model=finalized_model, + _run_graph_mode_mlir_export_test_ex( + model=model, input_data=input_data, + config=config, expected_ops={ "constexpr_blockwise_shift_scale": 2, "quantize": expected_quantize_count, "dequantize": expected_quantize_count, }, - export_backend=ExportBackend.CoreAI, - prepared_model_output=prepared_model_output, + calibrate=config_kind != "w8", externalized_model=model, ) diff --git a/tests/fixtures/quantization.py b/tests/fixtures/quantization.py index 21de857..84ea8f7 100644 --- a/tests/fixtures/quantization.py +++ b/tests/fixtures/quantization.py @@ -95,9 +95,7 @@ def make_graph_mode_module_boundary_config( ``module_input_spec`` / ``module_output_spec`` on top of it. Args: - module_boundary_dtype: Activation dtype for the boundary spec. Must differ - from global_dtype, otherwise the boundary and global observers share a - dtype and the config no longer proves the module scope outranks global. + module_boundary_dtype: Activation dtype for the boundary spec. module_name: Target the module at this path (``module_name_configs``). module_type: Target modules of this type (``module_type_configs``). Exactly one of module_name / module_type must be given. @@ -110,19 +108,11 @@ def make_graph_mode_module_boundary_config( QuantizerConfig: the global config plus a module-scoped boundary spec. Raises: - ValueError: If not exactly one of module_name / module_type is given, or if - module_boundary_dtype matches global_dtype. + ValueError: If not exactly one of module_name / module_type is provided. """ if (module_name is None) == (module_type is None): msg = "pass exactly one of module_name / module_type" raise ValueError(msg) - if module_boundary_dtype == global_dtype: - msg = ( - f"module_boundary_dtype {module_boundary_dtype} must differ from the " - f"global dtype {global_dtype}, otherwise the boundary edges are " - "indistinguishable from the globally quantized ones" - ) - raise ValueError(msg) def _boundary_spec() -> QuantizationSpec: return QuantizationSpec( diff --git a/tests/models/composite.py b/tests/models/composite.py index 44ea1fc..2bb8985 100644 --- a/tests/models/composite.py +++ b/tests/models/composite.py @@ -10,10 +10,8 @@ import pytest import torch import torch.nn as nn -import torch.nn.functional as F - -_DIM = 32 +from tests.utils import test_artifact_path # Externalize specs shared by the externalization test modules. @@ -75,33 +73,20 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: return self.softmax(x) -# Function scoped so the consuming test's seed marker applies. +# Function scoped so each test gets an independently mutable model. @pytest.fixture(scope="function") -def mnist_composite_rmsnorm_pretrained_state(mnist_dataset) -> dict: - """One-epoch-pretrained state_dict for MNISTCompositeRMSNormModel.""" - model = MNISTCompositeRMSNormModel() - - train_ds, _ = mnist_dataset - train_loader = torch.utils.data.DataLoader(train_ds, batch_size=128, shuffle=False) - - optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) - model.train() - for _data, _target in train_loader: - optimizer.zero_grad() - output = model(_data) - loss = F.nll_loss(output, _target) - loss.backward() - optimizer.step() - return {k: v.detach().clone() for k, v in model.state_dict().items()} +def mnist_composite_rmsnorm_pretrained_model() -> MNISTCompositeRMSNormModel: + """Load the committed 1-epoch MNISTCompositeRMSNormModel checkpoint. - -@pytest.fixture(scope="function") -def mnist_composite_rmsnorm_pretrained_model( - mnist_composite_rmsnorm_pretrained_state: dict, -) -> MNISTCompositeRMSNormModel: - """Fresh MNISTCompositeRMSNormModel loaded from the pretrained state fixture.""" + Trained with seed 42 for one epoch over the MNIST train split: Adam, + lr=1e-3, batch_size=128, shuffle=False, nll_loss. + """ model = MNISTCompositeRMSNormModel() - model.load_state_dict(mnist_composite_rmsnorm_pretrained_state) + model.load_state_dict( + torch.load( + test_artifact_path("mnist/mnist_composite_rmsnorm_pretrained_1epoch_08132026.pt") + ) + ) return model @@ -114,7 +99,7 @@ def mnist_composite_rmsnorm_example_input() -> torch.Tensor: class CompositeRMSNormOnlyModel(nn.Module): """A single RMSNormImpl composite and nothing else.""" - def __init__(self, dim: int = _DIM, eps: float = 1e-5) -> None: + def __init__(self, dim: int = 32, eps: float = 1e-5) -> None: from coreai_torch.composite_ops import RMSNormImpl # noqa: PLC0415 super().__init__() @@ -128,7 +113,7 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: class CompositeSDPAModel(nn.Module): """proj -> SDPA(composite) -> output_proj, fp16, single-head fake-dim.""" - def __init__(self, dim: int = _DIM) -> None: + def __init__(self, dim: int = 32) -> None: from coreai_torch.composite_ops import SDPA # noqa: PLC0415 super().__init__() diff --git a/tests/quantization/test_composite_op_externalize.py b/tests/quantization/test_composite_op_externalize.py index fa95099..87c4583 100644 --- a/tests/quantization/test_composite_op_externalize.py +++ b/tests/quantization/test_composite_op_externalize.py @@ -118,24 +118,27 @@ def _config( module_input_spec=module_input_spec, ) - def _finalize( + def _quantize_with_externalization_and_verify( self, model: nn.Module, sample: torch.Tensor, spec: ExternalizeSpec, module_name: str, - target_by: str, - boundary_dtype: torch.dtype, - module_input_spec: dict | None = None, + config: QuantizerConfig, ) -> tuple[torch.fx.GraphModule, str]: + """Run graph-mode PTQ on the model and verify the composite op stays opaque. + + Patches the composite for externalization, prepares, finalizes, and asserts + the composite is still a single opaque call_function node after each of + those two stages. + + Returns the finalized graph and the substring identifying that node. + """ _patch_model_for_externalization(model, [spec]) op_name = model.get_submodule(module_name)._externalize_op_name target_substr = f"coreai_torch_ext.{op_name}" - quantizer = Quantizer( - model, - self._config(spec, module_name, target_by, boundary_dtype, module_input_spec), - ) + quantizer = Quantizer(model, config) prepared = quantizer.prepare((sample,)) assert_single_call_function_node(prepared, target_substr, stage="prepared") @@ -213,8 +216,9 @@ def test_composite_boundary_quantized( boundary_dtype = torch.uint8 model = model_cls().eval().half() sample = torch.randn(2, 4, 32, dtype=torch.float16) - finalized, target_substr = self._finalize( - model, sample, spec, module_name, target_by, boundary_dtype + config = self._config(spec, module_name, target_by, boundary_dtype) + finalized, target_substr = self._quantize_with_externalization_and_verify( + model, sample, spec, module_name, config ) self._assert_boundary_quantized(finalized, target_substr, num_tensor_inputs, boundary_dtype) @@ -233,11 +237,9 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) num_tensor_inputs = 3 model = CompositeSDPAModel().eval().half() sample = torch.randn(2, 4, 32, dtype=torch.float16) - - finalized, target_substr = self._finalize( - model, - sample, - sdpa_externalize_spec(), + spec = sdpa_externalize_spec() + config = self._config( + spec, "composite", target_by, boundary_dtype, @@ -246,6 +248,10 @@ def test_composite_boundary_input_index_selects_those_args(self, target_by: str) }, ) + finalized, target_substr = self._quantize_with_externalization_and_verify( + model, sample, spec, "composite", config + ) + composite = assert_single_call_function_node(finalized, target_substr, stage="finalized") tensor_inputs = [ a for a in composite.args if isinstance(a, torch.fx.Node) and a.op != "get_attr"