From 56adbcb6f437b82d0ed18376066d0d80fb7898ac Mon Sep 17 00:00:00 2001 From: Marius Ciepluch <11855163+norandom@users.noreply.github.com> Date: Wed, 31 Jul 2024 19:25:57 +0200 Subject: [PATCH] added better model flows, solved issues w pca and scalers --- ...AE_sysmon_dataset_(Excel_implant_C2).ipynb | 8400 ++++++++++++++--- 1 file changed, 7271 insertions(+), 1129 deletions(-) diff --git a/LinFormer_AutoML_on_AE_sysmon_dataset_(Excel_implant_C2).ipynb b/LinFormer_AutoML_on_AE_sysmon_dataset_(Excel_implant_C2).ipynb index 023a117..11c199e 100644 --- a/LinFormer_AutoML_on_AE_sysmon_dataset_(Excel_implant_C2).ipynb +++ b/LinFormer_AutoML_on_AE_sysmon_dataset_(Excel_implant_C2).ipynb @@ -17,7 +17,7 @@ "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { - "13c7730f61b24661bca4b4406f488fbb": { + "a336f820e5124f5d9e344bb8b0d12ee5": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", @@ -32,14 +32,14 @@ "_view_name": "HBoxView", "box_style": "", "children": [ - "IPY_MODEL_82838b6e6693488682c97ce82ed723bf", - "IPY_MODEL_41b566d613234e03876a7c6a68431d7b", - "IPY_MODEL_dd83f610ca584acbba3738f2c137b2b9" + "IPY_MODEL_150475d8c96148eaa9d5230b85283e64", + "IPY_MODEL_19f3e10b3dd94c71b9add7ee1d8f4c13", + "IPY_MODEL_5aa33fe21abc482c997975ec5712d0da" ], - "layout": "IPY_MODEL_ad4f22541b284758b868c95e5e8ceff0" + "layout": "IPY_MODEL_0b51be1ad43c43fa89041fea2b062768" } }, - "82838b6e6693488682c97ce82ed723bf": { + "150475d8c96148eaa9d5230b85283e64": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", @@ -54,697 +54,13 @@ "_view_name": "HTMLView", "description": "", "description_tooltip": null, - "layout": "IPY_MODEL_13d9c546446a482ab6634e2c69c70685", + "layout": "IPY_MODEL_5ab992330571497ab2a07cd04841b9d3", "placeholder": "​", - "style": "IPY_MODEL_10c31ef1ded9471cae583be49e7092e5", - "value": "100%" - } - }, - "41b566d613234e03876a7c6a68431d7b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c1ad9d79f8464e71bd79ae848c103a58", - "max": 8039037, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_0de9cbe7986c49fb99ae4f3abdba42d9", - "value": 8039037 - } - }, - "dd83f610ca584acbba3738f2c137b2b9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6b12aceb2e4c46eeb708d0877a9ca639", - "placeholder": "​", - "style": "IPY_MODEL_b6edc45065c7488a8b8be5e1349b27ba", - "value": " 8.04M/8.04M [00:00<00:00, 9.88MiB/s]" - } - }, - "ad4f22541b284758b868c95e5e8ceff0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "13d9c546446a482ab6634e2c69c70685": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "10c31ef1ded9471cae583be49e7092e5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c1ad9d79f8464e71bd79ae848c103a58": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0de9cbe7986c49fb99ae4f3abdba42d9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "6b12aceb2e4c46eeb708d0877a9ca639": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b6edc45065c7488a8b8be5e1349b27ba": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "6d9d173f139a43e3a6b0b1deb2fb557b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_34569214f37b44e0802ddd403a4fa1a9", - "IPY_MODEL_2bdfcb2139bb4ae4b670c1fb49db6911", - "IPY_MODEL_b27ff271d01a49e38a32cd3ddcebe77a" - ], - "layout": "IPY_MODEL_92e050af8c674152b4d279fdda960458" - } - }, - "34569214f37b44e0802ddd403a4fa1a9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6f00da7475754dad8d5d5ce800ae673d", - "placeholder": "​", - "style": "IPY_MODEL_1a9b0c9e9cb941fbb57529d10d054084", - "value": "100%" - } - }, - "2bdfcb2139bb4ae4b670c1fb49db6911": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_545d68c2b8b742da9dd7983a3321ebf1", - "max": 1716416, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8956f45722f841dab504335dcc1921bc", - "value": 1716416 - } - }, - "b27ff271d01a49e38a32cd3ddcebe77a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_1785191337814317989989f0800e1424", - "placeholder": "​", - "style": "IPY_MODEL_d25bea1e539c4d328f05ded6af8b8154", - "value": " 1.72M/1.72M [00:00<00:00, 9.13MiB/s]" - } - }, - "92e050af8c674152b4d279fdda960458": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "6f00da7475754dad8d5d5ce800ae673d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1a9b0c9e9cb941fbb57529d10d054084": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "545d68c2b8b742da9dd7983a3321ebf1": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8956f45722f841dab504335dcc1921bc": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "1785191337814317989989f0800e1424": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d25bea1e539c4d328f05ded6af8b8154": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "bcf5338c159d4d53bc3e39e717885292": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_7276e9b8b79d41ab991296d44521e2ee", - "IPY_MODEL_f2ab86c6413649a595edf4b8feeb6a66", - "IPY_MODEL_decc923894ab4ef4b35fa627b1b2dfb4" - ], - "layout": "IPY_MODEL_9875e07950114beca6741a51962c1f30" - } - }, - "7276e9b8b79d41ab991296d44521e2ee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_90db1bae92c94a49ab8bc9c12073e552", - "placeholder": "​", - "style": "IPY_MODEL_92a42873a8ef4c00ad24ef47a62b4093", + "style": "IPY_MODEL_4a8897c90c19427fa82afa4fa62f31da", "value": "Optimization Progress: 100%" } }, - "f2ab86c6413649a595edf4b8feeb6a66": { + "19f3e10b3dd94c71b9add7ee1d8f4c13": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", @@ -760,15 +76,15 @@ "bar_style": "", "description": "", "description_tooltip": null, - "layout": "IPY_MODEL_1826f0b9003a4f8bb1c074f526560c86", + "layout": "IPY_MODEL_7df01173ffee4067b1c7490fab0b571b", "max": 120, "min": 0, "orientation": "horizontal", - "style": "IPY_MODEL_549831432f244f5080c74eb842bae875", + "style": "IPY_MODEL_6bd42f421a4e4e60b2d7edc8784e07aa", "value": 120 } }, - "decc923894ab4ef4b35fa627b1b2dfb4": { + "5aa33fe21abc482c997975ec5712d0da": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", @@ -783,13 +99,13 @@ "_view_name": "HTMLView", "description": "", "description_tooltip": null, - "layout": "IPY_MODEL_20be31d5be524d76bc2dbb3baad4edf3", + "layout": "IPY_MODEL_09932ad0a1fe4fd196b38b16dc74f94a", "placeholder": "​", - "style": "IPY_MODEL_fc71d71e57774cb1a0df69e82d3e7c2d", - "value": " 120/120 [02:00<00:00,  1.16pipeline/s]" + "style": "IPY_MODEL_f7354d5ee6e04705968e30d7a43ebbe7", + "value": " 120/120 [01:53<00:00,  1.21pipeline/s]" } }, - "9875e07950114beca6741a51962c1f30": { + "0b51be1ad43c43fa89041fea2b062768": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", @@ -841,7 +157,7 @@ "width": null } }, - "90db1bae92c94a49ab8bc9c12073e552": { + "5ab992330571497ab2a07cd04841b9d3": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", @@ -893,7 +209,7 @@ "width": null } }, - "92a42873a8ef4c00ad24ef47a62b4093": { + "4a8897c90c19427fa82afa4fa62f31da": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", @@ -908,7 +224,7 @@ "description_width": "" } }, - "1826f0b9003a4f8bb1c074f526560c86": { + "7df01173ffee4067b1c7490fab0b571b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", @@ -960,7 +276,7 @@ "width": null } }, - "549831432f244f5080c74eb842bae875": { + "6bd42f421a4e4e60b2d7edc8784e07aa": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", @@ -976,7 +292,7 @@ "description_width": "" } }, - "20be31d5be524d76bc2dbb3baad4edf3": { + "09932ad0a1fe4fd196b38b16dc74f94a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", @@ -1028,7 +344,3085 @@ "width": null } }, - "fc71d71e57774cb1a0df69e82d3e7c2d": { + "f7354d5ee6e04705968e30d7a43ebbe7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "feb69d6d248b4e2abf52d6622dd3638b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_712ff38a74994c5082fe487de437ec67", + "IPY_MODEL_81a29faa64d44f2c9a173a9213618f4c", + "IPY_MODEL_35012b6363cf4ca88c4c5221d264ec25" + ], + "layout": "IPY_MODEL_598537621c514f51be27ebaf9bde7d54" + } + }, + "712ff38a74994c5082fe487de437ec67": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_825b3f67b44b4136a36909da95412031", + "placeholder": "​", + "style": "IPY_MODEL_8b121673d208412ab1f426a3ff1698ba", + "value": "Optimization Progress: 100%" + } + }, + "81a29faa64d44f2c9a173a9213618f4c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_02a6753498b14c459016b7ff31c4b6d7", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_384c150f10e94ba78243d1a260e66887", + "value": 120 + } + }, + "35012b6363cf4ca88c4c5221d264ec25": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bb1d1e093dec47f393c713548bfc6cc6", + "placeholder": "​", + "style": "IPY_MODEL_05b2a6fb28aa434a94c18c7d64cd55f1", + "value": " 120/120 [06:21<00:00,  1.55s/pipeline]" + } + }, + "598537621c514f51be27ebaf9bde7d54": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "825b3f67b44b4136a36909da95412031": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8b121673d208412ab1f426a3ff1698ba": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "02a6753498b14c459016b7ff31c4b6d7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "384c150f10e94ba78243d1a260e66887": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "bb1d1e093dec47f393c713548bfc6cc6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "05b2a6fb28aa434a94c18c7d64cd55f1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a2f43127d721436185ba241b84cc87d7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_3618c2d6264c4359a17bbdecc7db70d8", + "IPY_MODEL_286cc95f7d6c47a6863c7fda02f83d3f", + "IPY_MODEL_cabaca33a5cc4d0fb9fa99f42ece4167" + ], + "layout": "IPY_MODEL_153d243e01b24b5cad305ec4d886b922" + } + }, + "3618c2d6264c4359a17bbdecc7db70d8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e8bf60db6d1b47b2a6752fcceebad0e7", + "placeholder": "​", + "style": "IPY_MODEL_600f0f18ccaf4c89aa37feaa0b360f13", + "value": "Optimization Progress: 100%" + } + }, + "286cc95f7d6c47a6863c7fda02f83d3f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_33f5284de07e4be29e4f39d5aaaa2d9b", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4a850f0d51014dfa9b55c86d04707b24", + "value": 120 + } + }, + "cabaca33a5cc4d0fb9fa99f42ece4167": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ae8a589b32c44836894c6d3b708b896d", + "placeholder": "​", + "style": "IPY_MODEL_a57766432bb54d24a3869e0553c026d1", + "value": " 120/120 [05:13<00:00,  1.83s/pipeline]" + } + }, + "153d243e01b24b5cad305ec4d886b922": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "e8bf60db6d1b47b2a6752fcceebad0e7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "600f0f18ccaf4c89aa37feaa0b360f13": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "33f5284de07e4be29e4f39d5aaaa2d9b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4a850f0d51014dfa9b55c86d04707b24": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ae8a589b32c44836894c6d3b708b896d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a57766432bb54d24a3869e0553c026d1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2cf8dcb41b3340cea65c251b3d8681d4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_6e3a5bb9d6d7456982660f0edcc3b8c0", + "IPY_MODEL_0bb2408ba21a481983c0a74f1411ef0a", + "IPY_MODEL_4528e59b16d04228a5cc508fadb56a54" + ], + "layout": "IPY_MODEL_61072176986f4c9fb48f403c25ac3024" + } + }, + "6e3a5bb9d6d7456982660f0edcc3b8c0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9881b9f569b3445897972c0340870318", + "placeholder": "​", + "style": "IPY_MODEL_f09971fa706c4509b3530edabeb47864", + "value": "Optimization Progress: 100%" + } + }, + "0bb2408ba21a481983c0a74f1411ef0a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7510b9c108494e3dbe5ee031bf367e2b", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_2ed7ace57f89415fba714200fe44c2f9", + "value": 120 + } + }, + "4528e59b16d04228a5cc508fadb56a54": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bb51c5c7834c419a87a30752cd769d91", + "placeholder": "​", + "style": "IPY_MODEL_cc9bf86d64fc48f490a38fae5483ddb2", + "value": " 120/120 [07:12<00:00,  2.45s/pipeline]" + } + }, + "61072176986f4c9fb48f403c25ac3024": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "9881b9f569b3445897972c0340870318": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f09971fa706c4509b3530edabeb47864": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7510b9c108494e3dbe5ee031bf367e2b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2ed7ace57f89415fba714200fe44c2f9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "bb51c5c7834c419a87a30752cd769d91": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cc9bf86d64fc48f490a38fae5483ddb2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ed38c4b5280a4e0da6b3e979ca380db5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_045cf04f33a643e8816a674d659cc252", + "IPY_MODEL_c5b0b6bebd0b49e0b10116770251023e", + "IPY_MODEL_c42b63c849f7469496fa292cc53efae3" + ], + "layout": "IPY_MODEL_a336fafd8e334185a39ca81268ca9f90" + } + }, + "045cf04f33a643e8816a674d659cc252": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_007b3fd39d1c480c959db4ed7abb37fe", + "placeholder": "​", + "style": "IPY_MODEL_5247fe5ea6724b15934a7142b8a8a8b1", + "value": "Optimization Progress: 100%" + } + }, + "c5b0b6bebd0b49e0b10116770251023e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ff008c746112461781825f85f212dd81", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c290371939ed4a8999c1411b426448ed", + "value": 120 + } + }, + "c42b63c849f7469496fa292cc53efae3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_09e3fa8828024d1cab95af2452cbf516", + "placeholder": "​", + "style": "IPY_MODEL_b1f5ea5f99b249dc9c8d2b26f43485f0", + "value": " 120/120 [04:12<00:00,  1.85s/pipeline]" + } + }, + "a336fafd8e334185a39ca81268ca9f90": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "007b3fd39d1c480c959db4ed7abb37fe": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5247fe5ea6724b15934a7142b8a8a8b1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ff008c746112461781825f85f212dd81": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c290371939ed4a8999c1411b426448ed": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "09e3fa8828024d1cab95af2452cbf516": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b1f5ea5f99b249dc9c8d2b26f43485f0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b41836beb11a4623b7fa6091494c0e85": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_d1fb8e94033f47d3b7123c513473519d", + "IPY_MODEL_0f90f79a7f0d4bcbaa2ada2379b65f53", + "IPY_MODEL_dedf553fc5c24b14a86a779a61a39be5" + ], + "layout": "IPY_MODEL_6566843282bc4bb59c7044ab3b812f40" + } + }, + "d1fb8e94033f47d3b7123c513473519d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fcefb4debd9a4445a94a9fc5847662e4", + "placeholder": "​", + "style": "IPY_MODEL_bbe6750092e44b2aafc5afb33e71ae88", + "value": "Optimization Progress: 100%" + } + }, + "0f90f79a7f0d4bcbaa2ada2379b65f53": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_50769ac7392e4bccaf83e32f8e5e3754", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_f202232d07f946ccaf899e672c2b7dd7", + "value": 120 + } + }, + "dedf553fc5c24b14a86a779a61a39be5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_111571775b67440db61746dc6a653380", + "placeholder": "​", + "style": "IPY_MODEL_1fc51b4708134f18995b5dd73631446d", + "value": " 120/120 [05:59<00:00,  2.15s/pipeline]" + } + }, + "6566843282bc4bb59c7044ab3b812f40": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "fcefb4debd9a4445a94a9fc5847662e4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bbe6750092e44b2aafc5afb33e71ae88": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "50769ac7392e4bccaf83e32f8e5e3754": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f202232d07f946ccaf899e672c2b7dd7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "111571775b67440db61746dc6a653380": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1fc51b4708134f18995b5dd73631446d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f466f42deeac4321b8b9768a11d6a755": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_06b74e83419b4d2b94913aeb490a7cb0", + "IPY_MODEL_de16524e0e5d46f9a8b511fa82e748a8", + "IPY_MODEL_e13204ee59ab400280347f23c0d31705" + ], + "layout": "IPY_MODEL_ad599c9ce9b04059b37c94dcae4b23a8" + } + }, + "06b74e83419b4d2b94913aeb490a7cb0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aeefdbc3453543baa3d6e72ccd15ee54", + "placeholder": "​", + "style": "IPY_MODEL_3a84a44443a944c399486902d4db6bdc", + "value": "Optimization Progress: 100%" + } + }, + "de16524e0e5d46f9a8b511fa82e748a8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2e55913ae8944ef9923724a8351bacb4", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_dcc3e817b40643388a5f99a54fe13e43", + "value": 120 + } + }, + "e13204ee59ab400280347f23c0d31705": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_272dc71a7ccf4608bfdea6a17524a886", + "placeholder": "​", + "style": "IPY_MODEL_5a3d943f85e34887aeb64a0e6b189f32", + "value": " 120/120 [09:53<00:00,  1.47s/pipeline]" + } + }, + "ad599c9ce9b04059b37c94dcae4b23a8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "aeefdbc3453543baa3d6e72ccd15ee54": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3a84a44443a944c399486902d4db6bdc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2e55913ae8944ef9923724a8351bacb4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "dcc3e817b40643388a5f99a54fe13e43": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "272dc71a7ccf4608bfdea6a17524a886": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5a3d943f85e34887aeb64a0e6b189f32": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "065f516618c041f1ba57df39d17cc95d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ca2767bb06444f03a1a31dd9e5216c45", + "IPY_MODEL_1d9710db98c04adeb3855f4062301e24", + "IPY_MODEL_57141f99793f45708db3961cf4178fc9" + ], + "layout": "IPY_MODEL_6c4c02ca0cb64050ac7e201a1a60be72" + } + }, + "ca2767bb06444f03a1a31dd9e5216c45": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b6b5382bb2684e74a2c36b49f423eee3", + "placeholder": "​", + "style": "IPY_MODEL_a4a4a02a4332458789866a0e0e7839d3", + "value": "Optimization Progress: 100%" + } + }, + "1d9710db98c04adeb3855f4062301e24": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_871438bb5a0d4d31b3b8a0f18fcdac78", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_294ffc18963140ea96c01095e3a1300f", + "value": 120 + } + }, + "57141f99793f45708db3961cf4178fc9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6dda83426ca749bd822d2bd0d39744ed", + "placeholder": "​", + "style": "IPY_MODEL_d37293f1d67f45babbe2a875df701c40", + "value": " 120/120 [04:43<00:00,  5.74s/pipeline]" + } + }, + "6c4c02ca0cb64050ac7e201a1a60be72": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "b6b5382bb2684e74a2c36b49f423eee3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a4a4a02a4332458789866a0e0e7839d3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "871438bb5a0d4d31b3b8a0f18fcdac78": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "294ffc18963140ea96c01095e3a1300f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "6dda83426ca749bd822d2bd0d39744ed": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d37293f1d67f45babbe2a875df701c40": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2ae5d11987c44076b95c1294af800c28": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_75c27d61248b477e9c58211b066ab62f", + "IPY_MODEL_00628b308f4244c4ad533a67cb90ba43", + "IPY_MODEL_851e8257d678458db2612a04803e8c17" + ], + "layout": "IPY_MODEL_8f472688c98745f28345f31e852b361b" + } + }, + "75c27d61248b477e9c58211b066ab62f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f1b8071a183e47af81e8d96290ca7370", + "placeholder": "​", + "style": "IPY_MODEL_18d1acb1cdad46f1832c98ab44f0bc53", + "value": "Optimization Progress: 100%" + } + }, + "00628b308f4244c4ad533a67cb90ba43": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_21abac8483874bb1acdc45f6e8f78b53", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_b4e4db272e35407899de20c7b30d1551", + "value": 120 + } + }, + "851e8257d678458db2612a04803e8c17": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9d4143827e3f4e949cde68384a7beb59", + "placeholder": "​", + "style": "IPY_MODEL_aa805872f24140f6aa6ee2ac72b34b59", + "value": " 120/120 [04:12<00:00,  1.73pipeline/s]" + } + }, + "8f472688c98745f28345f31e852b361b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "f1b8071a183e47af81e8d96290ca7370": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "18d1acb1cdad46f1832c98ab44f0bc53": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "21abac8483874bb1acdc45f6e8f78b53": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b4e4db272e35407899de20c7b30d1551": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "9d4143827e3f4e949cde68384a7beb59": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "aa805872f24140f6aa6ee2ac72b34b59": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ed028f92fe6544159b14dcf220623223": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2ff14125384a4f3cad97a03f9d2ff55f", + "IPY_MODEL_d70eced834c64f399a3db48dcc19f802", + "IPY_MODEL_b85cfd236fbc4c50b2572f0ff7ddea1c" + ], + "layout": "IPY_MODEL_b4e51caccd1e40baac5143667206d8cb" + } + }, + "2ff14125384a4f3cad97a03f9d2ff55f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8031586f1f8d4dbbaf44708b12f4eb13", + "placeholder": "​", + "style": "IPY_MODEL_a2278a2947354727a76758cb4bf5e682", + "value": "Optimization Progress: 100%" + } + }, + "d70eced834c64f399a3db48dcc19f802": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a2debbdff91649f29c7a579911090df4", + "max": 120, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_7d4b85786ff04c9d843753c91c80f854", + "value": 120 + } + }, + "b85cfd236fbc4c50b2572f0ff7ddea1c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cb681559245a4d12bd4551bcfea063c4", + "placeholder": "​", + "style": "IPY_MODEL_0967c0fe1d9a4048b4e7b4266a75d893", + "value": " 120/120 [05:41<00:00,  2.27s/pipeline]" + } + }, + "b4e51caccd1e40baac5143667206d8cb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "8031586f1f8d4dbbaf44708b12f4eb13": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a2278a2947354727a76758cb4bf5e682": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a2debbdff91649f29c7a579911090df4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7d4b85786ff04c9d843753c91c80f854": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "cb681559245a4d12bd4551bcfea063c4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0967c0fe1d9a4048b4e7b4266a75d893": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", @@ -2752,6 +5146,1374 @@ "_view_name": "StyleView", "description_width": "" } + }, + "d35be0ff26cc4d0e85b498638ec728da": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_6c3982ed895846f2a07befc28277debd", + "IPY_MODEL_a031633d17474670a3055d94249d58ee", + "IPY_MODEL_08d30171bbb44668aea730cc7e2e828a" + ], + "layout": "IPY_MODEL_bda89cfac064435b8de02f41e689e0a3" + } + }, + "6c3982ed895846f2a07befc28277debd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_603fa104247d4ae8888440acca48221e", + "placeholder": "​", + "style": "IPY_MODEL_bf6290dc87bd447da28102899e57ffe5", + "value": "100%" + } + }, + "a031633d17474670a3055d94249d58ee": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fe8beb6587574f93a2947c2bcc907091", + "max": 8039037, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_3b5d864ced1149c4979b491cbc3070f7", + "value": 8039037 + } + }, + "08d30171bbb44668aea730cc7e2e828a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e2306dc620194ce485bd2663c7d25738", + "placeholder": "​", + "style": "IPY_MODEL_329389fea5f74dca965f296707c2a8d0", + "value": " 8.04M/8.04M [00:00<00:00, 29.6MiB/s]" + } + }, + "bda89cfac064435b8de02f41e689e0a3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "603fa104247d4ae8888440acca48221e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bf6290dc87bd447da28102899e57ffe5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fe8beb6587574f93a2947c2bcc907091": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3b5d864ced1149c4979b491cbc3070f7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e2306dc620194ce485bd2663c7d25738": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "329389fea5f74dca965f296707c2a8d0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "9d26aed57a8244ada934039dd928555c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b04abee189594c62b235e5076deafc84", + "IPY_MODEL_ff0cc2d2cf8f4009bd200fd17d7ba517", + "IPY_MODEL_49f821f89aa44034af5988b888734185" + ], + "layout": "IPY_MODEL_f10f65b1cb0547928b1c7b87c6385de4" + } + }, + "b04abee189594c62b235e5076deafc84": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bdeb6c6df5c049a69c0b613a42a69e35", + "placeholder": "​", + "style": "IPY_MODEL_565b8a229f66455886175a51a975878d", + "value": "100%" + } + }, + "ff0cc2d2cf8f4009bd200fd17d7ba517": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3491f280a58046518c5c28686cd80eb5", + "max": 1716416, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ef3de5b665104edcab59a1200259b897", + "value": 1716416 + } + }, + "49f821f89aa44034af5988b888734185": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ed1d6f1156f748f8993dda1ee97f5caf", + "placeholder": "​", + "style": "IPY_MODEL_e84db532db0643fd81ff21364b3b2e53", + "value": " 1.72M/1.72M [00:00<00:00, 29.0MiB/s]" + } + }, + "f10f65b1cb0547928b1c7b87c6385de4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bdeb6c6df5c049a69c0b613a42a69e35": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "565b8a229f66455886175a51a975878d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3491f280a58046518c5c28686cd80eb5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ef3de5b665104edcab59a1200259b897": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ed1d6f1156f748f8993dda1ee97f5caf": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e84db532db0643fd81ff21364b3b2e53": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "48125358d93747af8d60adf49cb4bed3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ce66e5dab6a7433498679f44d7922fde", + "IPY_MODEL_037cca2c146a429498219af57498f92d", + "IPY_MODEL_a4dd416d3a3f400a958713c9e1338830" + ], + "layout": "IPY_MODEL_c98d82d69aa5436e86a00b3b24c71dc8" + } + }, + "ce66e5dab6a7433498679f44d7922fde": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3e842df16ae04f7c9fa0500251ea6070", + "placeholder": "​", + "style": "IPY_MODEL_125527f8c490490f93c88276e8da441e", + "value": "100%" + } + }, + "037cca2c146a429498219af57498f92d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_38ea9e2fdf934b299dbf47b478f454cd", + "max": 3288938, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_25123bc15acb4025a468103612181d4b", + "value": 3288938 + } + }, + "a4dd416d3a3f400a958713c9e1338830": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_38eadb841c66408ca51a85054a2da63c", + "placeholder": "​", + "style": "IPY_MODEL_283ef3c448dd4fb0baaa1621123a5ced", + "value": " 3.29M/3.29M [00:00<00:00, 9.27MiB/s]" + } + }, + "c98d82d69aa5436e86a00b3b24c71dc8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3e842df16ae04f7c9fa0500251ea6070": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "125527f8c490490f93c88276e8da441e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "38ea9e2fdf934b299dbf47b478f454cd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "25123bc15acb4025a468103612181d4b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "38eadb841c66408ca51a85054a2da63c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "283ef3c448dd4fb0baaa1621123a5ced": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0ee9d77e31c343d2b226c9e1c370899a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cefbf3ec854e463eac3047d7f2366a9b", + "IPY_MODEL_5d5a04539517439c9a47f725bbfca641", + "IPY_MODEL_487df5716a1f42b9ad08a05300882448" + ], + "layout": "IPY_MODEL_f6f95cf2eb1f43cdbb1be5a1ffc19621" + } + }, + "cefbf3ec854e463eac3047d7f2366a9b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a8b2545d7d94490b8df9d8a63d7fde2d", + "placeholder": "​", + "style": "IPY_MODEL_18b7438e17ef4851aa9c8d0dfc52f2d5", + "value": "Optimization Progress: 100%" + } + }, + "5d5a04539517439c9a47f725bbfca641": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_939ebe26aaf74df78c81c255aefcc7e5", + "max": 20, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c5677148554a4e65b74ae9fc95ae4c37", + "value": 20 + } + }, + "487df5716a1f42b9ad08a05300882448": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_328be8dce5cf4b2a8418e7693f1829c0", + "placeholder": "​", + "style": "IPY_MODEL_48d9d503aebd44578cb545fdb4b28776", + "value": " 40/40 [02:13<00:00,  2.60s/pipeline]" + } + }, + "f6f95cf2eb1f43cdbb1be5a1ffc19621": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": "hidden", + "width": null + } + }, + "a8b2545d7d94490b8df9d8a63d7fde2d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "18b7438e17ef4851aa9c8d0dfc52f2d5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "939ebe26aaf74df78c81c255aefcc7e5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c5677148554a4e65b74ae9fc95ae4c37": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "328be8dce5cf4b2a8418e7693f1829c0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "48d9d503aebd44578cb545fdb4b28776": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } } } } @@ -2793,7 +6555,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "metadata": { "id": "ayxWRSxzgwh_" }, @@ -2834,9 +6596,9 @@ "base_uri": "https://localhost:8080/" }, "id": "vyKWa35bkFcG", - "outputId": "61b4bff8-193b-40f0-fb90-d1d1a8c2010c" + "outputId": "afaf2961-374c-4ced-ba84-a8eb74963834" }, - "execution_count": 2, + "execution_count": 9, "outputs": [ { "output_type": "stream", @@ -2944,23 +6706,23 @@ "base_uri": "https://localhost:8080/", "height": 85, "referenced_widgets": [ - "13c7730f61b24661bca4b4406f488fbb", - "82838b6e6693488682c97ce82ed723bf", - "41b566d613234e03876a7c6a68431d7b", - "dd83f610ca584acbba3738f2c137b2b9", - "ad4f22541b284758b868c95e5e8ceff0", - "13d9c546446a482ab6634e2c69c70685", - "10c31ef1ded9471cae583be49e7092e5", - "c1ad9d79f8464e71bd79ae848c103a58", - "0de9cbe7986c49fb99ae4f3abdba42d9", - "6b12aceb2e4c46eeb708d0877a9ca639", - "b6edc45065c7488a8b8be5e1349b27ba" + "d35be0ff26cc4d0e85b498638ec728da", + "6c3982ed895846f2a07befc28277debd", + "a031633d17474670a3055d94249d58ee", + "08d30171bbb44668aea730cc7e2e828a", + "bda89cfac064435b8de02f41e689e0a3", + "603fa104247d4ae8888440acca48221e", + "bf6290dc87bd447da28102899e57ffe5", + "fe8beb6587574f93a2947c2bcc907091", + "3b5d864ced1149c4979b491cbc3070f7", + "e2306dc620194ce485bd2663c7d25738", + "329389fea5f74dca965f296707c2a8d0" ] }, "id": "5EEoa3gUmFpn", - "outputId": "83f18cff-926c-467d-dc4e-089e69342895" + "outputId": "806090b8-b3d5-473b-9da5-52de1860cb00" }, - "execution_count": 3, + "execution_count": 10, "outputs": [ { "output_type": "stream", @@ -2978,7 +6740,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "13c7730f61b24661bca4b4406f488fbb" + "model_id": "d35be0ff26cc4d0e85b498638ec728da" } }, "metadata": {} @@ -3023,23 +6785,23 @@ "base_uri": "https://localhost:8080/", "height": 85, "referenced_widgets": [ - "6d9d173f139a43e3a6b0b1deb2fb557b", - "34569214f37b44e0802ddd403a4fa1a9", - "2bdfcb2139bb4ae4b670c1fb49db6911", - "b27ff271d01a49e38a32cd3ddcebe77a", - "92e050af8c674152b4d279fdda960458", - "6f00da7475754dad8d5d5ce800ae673d", - "1a9b0c9e9cb941fbb57529d10d054084", - "545d68c2b8b742da9dd7983a3321ebf1", - "8956f45722f841dab504335dcc1921bc", - "1785191337814317989989f0800e1424", - "d25bea1e539c4d328f05ded6af8b8154" + "9d26aed57a8244ada934039dd928555c", + "b04abee189594c62b235e5076deafc84", + "ff0cc2d2cf8f4009bd200fd17d7ba517", + "49f821f89aa44034af5988b888734185", + "f10f65b1cb0547928b1c7b87c6385de4", + "bdeb6c6df5c049a69c0b613a42a69e35", + "565b8a229f66455886175a51a975878d", + "3491f280a58046518c5c28686cd80eb5", + "ef3de5b665104edcab59a1200259b897", + "ed1d6f1156f748f8993dda1ee97f5caf", + "e84db532db0643fd81ff21364b3b2e53" ] }, "id": "PA-8JXLyn4Uv", - "outputId": "27f96d7f-c2ef-4809-a075-541d06920852" + "outputId": "1850bb3e-a2bc-4cf0-d988-98f3986e2ab1" }, - "execution_count": 4, + "execution_count": 75, "outputs": [ { "output_type": "stream", @@ -3057,7 +6819,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "6d9d173f139a43e3a6b0b1deb2fb557b" + "model_id": "9d26aed57a8244ada934039dd928555c" } }, "metadata": {} @@ -3071,6 +6833,85 @@ } ] }, + { + "cell_type": "markdown", + "source": [ + "# Download pre-vecorized data from the project" + ], + "metadata": { + "id": "rTw3shjR33yL" + } + }, + { + "cell_type": "code", + "source": [ + "# File name to search for\n", + "file_name = \"lab_logs_blindtest_activity_sysmon_1000samples_july_28_2024_filtered_vectors.parquet\"\n", + "\n", + "# Get the download URL of the specific file\n", + "# download_url = get_specific_file_from_latest_release(github_token, repository_name, file_name)\n", + "download_url = get_specific_file_from_tagged_release(github_token, repository_name, \"lab\", file_name)\n", + "print(download_url)\n", + "\n", + "if download_url:\n", + " local_file_path = file_name\n", + " download_file(download_url, github_token, local_file_path)\n", + "else:\n", + " print(\"File not found.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85, + "referenced_widgets": [ + "48125358d93747af8d60adf49cb4bed3", + "ce66e5dab6a7433498679f44d7922fde", + "037cca2c146a429498219af57498f92d", + "a4dd416d3a3f400a958713c9e1338830", + "c98d82d69aa5436e86a00b3b24c71dc8", + "3e842df16ae04f7c9fa0500251ea6070", + "125527f8c490490f93c88276e8da441e", + "38ea9e2fdf934b299dbf47b478f454cd", + "25123bc15acb4025a468103612181d4b", + "38eadb841c66408ca51a85054a2da63c", + "283ef3c448dd4fb0baaa1621123a5ced" + ] + }, + "id": "WdRLtddt378k", + "outputId": "58f22716-5958-4cf4-a2d4-eff7384b87cc" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "https://api.github.com/repos/norandom/log2ml/releases/assets/182698628\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " 0%| | 0.00/3.29M [00:00 0:\n", + " # Get a random index\n", + " random_index = random.randint(0, bad_messages.height - 1)\n", + "\n", + " # Select the message at that random index\n", + " random_bad_message = bad_messages.row(random_index)[0]\n", + " print(random_bad_message)\n", + "else:\n", + " print(\"No bad messages labeled found.\")\n", + "\n", + "print(\"\\n\\n\")\n", + "\n", + "if good_messages.height > 0:\n", + " # Get a random index\n", + " random_index = random.randint(0, good_messages.height - 1)\n", + "\n", + " # Select the message at that random index\n", + " random_good_message = good_messages.row(random_index)[0]\n", + " print(random_good_message)\n", + "else:\n", + " print(\"No good messages labeled found.\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4SguqPPKSdpJ", - "outputId": "9e9a39cb-10b8-44fb-bc22-65deafe45989" + "outputId": "b873ab30-300f-4b23-bf61-f7ed5ced345d" }, - "execution_count": null, + "execution_count": 123, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "['@timestamp', 'host.hostname', 'host.ip', 'log.level', 'winlog.event_id', 'winlog.task', 'message', 'filtered_message', 'image', 'target_filename', 'parent_image', 'text', 'temp_folder', 'filename', 'label']\n" + "['@timestamp', 'host.hostname', 'host.ip', 'log.level', 'winlog.event_id', 'winlog.task', 'message', 'filtered_message', 'image', 'target_filename', 'parent_image', 'text', 'temp_folder', 'filename', 'label', 'message_vector']\n", + "shape: (13_455, 2)\n", + "┌───────┬──────────────────────────────┐\n", + "│ label ┆ filtered_message │\n", + "│ --- ┆ --- │\n", + "│ str ┆ str │\n", + "╞═══════╪══════════════════════════════╡\n", + "│ good ┆ Network connection detected: │\n", + "│ ┆ Rul… │\n", + "│ good ┆ Network connection detected: │\n", + "│ ┆ Rul… │\n", + "│ good ┆ Process accessed: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ Ut… │\n", + "│ good ┆ Process accessed: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ Ut… │\n", + "│ … ┆ … │\n", + "│ good ┆ Process accessed: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ Ut… │\n", + "│ good ┆ Process accessed: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ Ut… │\n", + "│ good ┆ Process accessed: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ Ut… │\n", + "│ good ┆ Process Create: │\n", + "│ ┆ RuleName: - │\n", + "│ ┆ UtcT… │\n", + "└───────┴──────────────────────────────┘\n", + "File created:\n", + "RuleName: EXE\n", + "UtcTime: 2024-07-28 21:54:31.900\n", + "ProcessGuid: {18e8265a-be12-66a6-3010-000000004400}\n", + "ProcessId: 1248\n", + "Image: C:\\Program Files\\Microsoft Office\\Root\\Office16\\EXCEL.EXE\n", + "TargetFilename: C:\\Users\\student\\AppData\\Local\\Temp\\file.exe\n", + "CreationUtcTime: 2024-07-23 14:24:50.520\n", + "\n", + "\n", + "\n", + "Dns query:\n", + "RuleName: -\n", + "UtcTime: 2024-07-28 19:05:11.949\n", + "ProcessGuid: {18e8265a-9666-66a6-4f0b-000000004400}\n", + "ProcessId: 3232\n", + "QueryName: messaging\n", + "QueryStatus: 0\n", + "QueryResults: type: 5 prod-campaignaggregator.omexexternallfb.office.net.akadns.net;::ffff:52.109.16.3;\n", + "Image: C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE\n" ] } ] @@ -3846,22 +7762,171 @@ " # Assuming outputs is the tensor of interest\n", " vector = outputs.mean(dim=1).detach() # Detach the tensor from the GPU\n", " return vector.cpu().numpy() # Move tensor back to CPU and convert to numpy\n", - "\n", - "# Assuming `better_columns_df` is a Polars DataFrame with a column \"filtered_message\"\n", + "\n" + ], + "metadata": { + "id": "EyvdFj83SQKI" + }, + "execution_count": 127, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Assuming df_f is a Polars DataFrame with a column \"filtered_message\"\n", "df_f = df_f.with_columns(\n", " pl.col(\"filtered_message\").map_elements(lambda x: vectorize_text(x).flatten(), return_dtype=pl.Object).alias(\"message_vector\")\n", + ")" + ], + "metadata": { + "id": "doS16Nq4S37g" + }, + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# broken\n", + "\n", + "\n", + "import polars as pl\n", + "import numpy as np\n", + "import json\n", + "\n", + "# Function to convert vector to string\n", + "def vector_to_string(vec):\n", + " return json.dumps(vec.tolist())\n", + "\n", + "# Function to convert string back to vector\n", + "def string_to_vector(s):\n", + " return np.array(json.loads(s))\n", + "\n", + "# Convert vector column to string representation\n", + "df_f = df_f.with_columns(\n", + " pl.col(\"message_vector\").map_elements(vector_to_string).alias(\"message_vector_str\")\n", ")\n", "\n", - "print(df_f)" + "# Drop the original vector column\n", + "df_f = df_f.drop(\"message_vector\")\n", + "\n", + "# Write to Parquet\n", + "df_f.write_parquet(\"lab_logs_blindtest_activity_sysmon_1000samples_july_28_2024_filtered_with_vectors.parquet\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "EyvdFj83SQKI", - "outputId": "2482d1f0-3f47-41e4-df13-5f73325e5e80" + "id": "clEaIJjHXRhM", + "outputId": "35b77b4d-5c35-46af-a0ae-645bd3f47328" }, - "execution_count": null, + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "shape: (5, 1)\n", + "┌────────────────┐\n", + "│ message_vector │\n", + "│ --- │\n", + "│ u32 │\n", + "╞════════════════╡\n", + "│ 30000 │\n", + "│ 30000 │\n", + "│ 30000 │\n", + "│ 30000 │\n", + "│ 30000 │\n", + "└────────────────┘\n", + "Sample vector length: 30000\n", + "Numpy vector shape: (30000,)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# broken\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Read from Parquet using pandas\n", + "pdf_read = pd.read_parquet(\"lab_logs_blindtest_activity_sysmon_1000samples_july_28_2024_filtered_with_vectors.parquet\")\n", + "\n", + "# Convert lists back to numpy arrays if needed\n", + "pdf_read['message_vector'] = pdf_read['message_vector_str'].apply(np.array)\n", + "\n", + "# Verify the shape of the vector\n", + "print(pdf_read['message_vector'].str.len().head())\n", + "\n", + "# Check a sample vector to ensure dimensionality is preserved\n", + "sample_vector = pdf_read['message_vector'].iloc[0]\n", + "print(f\"Sample vector shape: {sample_vector.shape}\")\n", + "\n", + "# If you need to convert back to Polars\n", + "df_read = pl.from_pandas(pdf_read)\n", + "\n", + "# Verify in Polars\n", + "print(df_read.select(pl.col(\"message_vector\").list.len()).head())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 327 + }, + "id": "981FBJ_rdh-V", + "outputId": "f363fc9e-071a-44ca-c9b5-1a1ce009e23a" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0 636264\n", + "1 636780\n", + "2 640357\n", + "3 640529\n", + "4 640428\n", + "Name: message_vector, dtype: int64\n" + ] + }, + { + "output_type": "error", + "ename": "AttributeError", + "evalue": "'str' object has no attribute 'shape'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;31m# Check a sample vector to ensure dimensionality is preserved\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msample_vector\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpdf_read\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'message_vector'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Sample vector shape: {sample_vector.shape}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;31m# If you need to convert back to Polars\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'str' object has no attribute 'shape'" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import polars as pl\n", + "import numpy as np\n", + "\n", + "print(df_f)\n", + "\n", + "print()\n", + "# Convert the 'message_vector' column to a NumPy array\n", + "X = np.array(df_f['message_vector'].to_list())\n", + "print(\"Original data shape:\", X.shape)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "W849gxLgM3vP", + "outputId": "368b0055-d479-405f-b9bd-388f4348a7ef" + }, + "execution_count": 19, "outputs": [ { "output_type": "stream", @@ -3871,200 +7936,57 @@ "┌────────────┬────────────┬────────────┬────────────┬───┬───────────┬──────────┬───────┬───────────┐\n", "│ @timestamp ┆ host.hostn ┆ host.ip ┆ log.level ┆ … ┆ temp_fold ┆ filename ┆ label ┆ message_v │\n", "│ --- ┆ ame ┆ --- ┆ --- ┆ ┆ er ┆ --- ┆ --- ┆ ector │\n", - "│ str ┆ --- ┆ str ┆ str ┆ ┆ --- ┆ str ┆ str ┆ --- │\n", - "│ ┆ str ┆ ┆ ┆ ┆ str ┆ ┆ ┆ object │\n", + "│ datetime[μ ┆ --- ┆ str ┆ str ┆ ┆ --- ┆ str ┆ str ┆ --- │\n", + "│ s, UTC] ┆ str ┆ ┆ ┆ ┆ str ┆ ┆ ┆ object │\n", "╞════════════╪════════════╪════════════╪════════════╪═══╪═══════════╪══════════╪═══════╪═══════════╡\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.45116 │\n", - "│ T15:08:24. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 934 0.01 │\n", - "│ 277Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 940297 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.4095… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.45242 │\n", - "│ T15:08:24. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 962 0.02 │\n", - "│ 488Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 170923 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.3832… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.37145 │\n", - "│ T15:08:25. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 707 0.04 │\n", - "│ 005Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 775189 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.2652… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.34181 │\n", - "│ T15:08:25. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 97 0.04 │\n", - "│ 005Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 779522 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.2722… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.48557 │\n", + "│ 15:08:24.2 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 746 0.19 │\n", + "│ 77 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 012241 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.0323… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.44357 │\n", + "│ 15:08:24.4 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 03 0.22 │\n", + "│ 88 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 111408 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.0301… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.29139 │\n", + "│ 15:08:25.0 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 94 0.17 │\n", + "│ 05 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 932689 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.1016… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.29095 │\n", + "│ 15:08:25.0 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 116 0.16 │\n", + "│ 05 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 983014 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.1212… │\n", "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.35288 │\n", - "│ T23:35:53. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 972 0.03 │\n", - "│ 054Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 555745 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.2832… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.37340 │\n", - "│ T23:35:54. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 525 0.03 │\n", - "│ 133Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 428246 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.2805… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.36035 │\n", - "│ T23:35:54. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 54 0.03 │\n", - "│ 133Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 481918 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.2802… │\n", - "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.41050 │\n", - "│ T23:41:55. ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 297 0.01 │\n", - "│ 301Z ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 828452 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ -0.3112… │\n", - "└────────────┴────────────┴────────────┴────────────┴───┴───────────┴──────────┴───────┴───────────┘\n" + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.27548 │\n", + "│ 23:35:53.0 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 81 0.19 │\n", + "│ 54 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 213162 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.1174… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.29359 │\n", + "│ 23:35:54.1 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 23 0.18 │\n", + "│ 33 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 748309 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.1262… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.27579 │\n", + "│ 23:35:54.1 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 793 0.18 │\n", + "│ 33 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 788172 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.1131… │\n", + "│ 2024-07-28 ┆ win10 ┆ fe80::c1af ┆ informatio ┆ … ┆ No ┆ ┆ good ┆ [-0.35910 │\n", + "│ 23:41:55.3 ┆ ┆ :35de:6006 ┆ n ┆ ┆ ┆ ┆ ┆ 064 │\n", + "│ 01 UTC ┆ ┆ :d4cf ┆ ┆ ┆ ┆ ┆ ┆ 0.1997092 │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 0.0654… │\n", + "└────────────┴────────────┴────────────┴────────────┴───┴───────────┴──────────┴───────┴───────────┘\n", + "\n", + "Original data shape: (13455, 30000)\n" ] } ] }, { - "cell_type": "code", + "cell_type": "markdown", "source": [ - "import polars as pl\n", - "import pyarrow as pa\n", - "import pyarrow.parquet as pq\n", - "import numpy as np\n", - "\n", - "# Print the column names and data types\n", - "print(\"Column names and data types:\")\n", - "for col in df_f.columns:\n", - " print(f\"{col}: {df_f[col].dtype}\")\n", - "\n", - "# Create PyArrow arrays for each column\n", - "pa_arrays = []\n", - "pa_field_names = []\n", - "\n", - "for col_name in df_f.columns:\n", - " col_data = df_f[col_name].to_list()\n", - "\n", - " if df_f[col_name].dtype == pl.Object:\n", - " # For Object dtype, we'll create a list of float64 arrays\n", - " try:\n", - " pa_array = pa.list_(pa.float64()).from_pandas(col_data)\n", - " except:\n", - " # If conversion fails, store as string\n", - " pa_array = pa.array([str(x) for x in col_data])\n", - " else:\n", - " pa_array = pa.array(col_data)\n", - "\n", - " pa_arrays.append(pa_array)\n", - " pa_field_names.append(col_name)\n", - "\n", - "# Create PyArrow table\n", - "pa_table = pa.Table.from_arrays(pa_arrays, names=pa_field_names)\n", - "\n", - "# Write the PyArrow table to Parquet\n", - "pq.write_table(pa_table, \"lab_logs_blindtest_activity_sysmon_1000samples_july_28_2024_filtered_vectors.parquet\")\n", - "\n", - "print(\"Parquet file written successfully.\")" + "### Read vectors into DataFrame" ], "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "RWRNV5iCTPHB", - "outputId": "ce896f59-95ef-4794-efb1-a50357ff6292" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Column names and data types:\n", - "@timestamp: Datetime(time_unit='us', time_zone='UTC')\n", - "host.hostname: Utf8\n", - "host.ip: Utf8\n", - "log.level: Utf8\n", - "winlog.event_id: Int64\n", - "winlog.task: Utf8\n", - "message: Utf8\n", - "filtered_message: Utf8\n", - "image: Utf8\n", - "target_filename: Utf8\n", - "parent_image: Utf8\n", - "text: Utf8\n", - "temp_folder: Utf8\n", - "filename: Utf8\n", - "label: Utf8\n", - "message_vector_list: Object\n", - "Parquet file written successfully.\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "import pyarrow.parquet as pq\n", - "import numpy as np\n", - "import pandas as pd\n", - "import re\n", - "\n", - "# Read the Parquet file\n", - "table = pq.read_table(\"lab_logs_blindtest_activity_sysmon_1000samples_july_28_2024_filtered_vectors.parquet\")\n", - "print(\"Parquet file read successfully\")\n", - "\n", - "# Convert to pandas DataFrame\n", - "df = table.to_pandas()\n", - "print(\"Converted to pandas DataFrame successfully\")\n", - "\n", - "# Function to convert string representation of array to numpy array\n", - "def string_to_array(s):\n", - " # Remove square brackets\n", - " s = s.strip('[]')\n", - " # Split by whitespace, handling the '...' case\n", - " nums = re.split(r'\\s+', s)\n", - " # Convert to float, ignoring '...' and empty strings\n", - " return np.array([float(num) for num in nums if num not in ['...', '']])\n", - "\n", - "# Convert message_vector_list to numpy arrays\n", - "try:\n", - " df['message_vector'] = df['message_vector_list'].apply(string_to_array)\n", - " print(\"Converted message_vector_list to numpy arrays successfully\")\n", - "except Exception as e:\n", - " print(f\"Error converting message_vector_list to numpy arrays: {e}\")\n", - " # Print a few examples of the problematic data\n", - " print(df['message_vector_list'].head())\n", - " raise\n", - "\n", - "# Drop the original message_vector_list column if you don't need it\n", - "df = df.drop(columns=['message_vector_list'])\n", - "\n", - "print(\"Final DataFrame columns:\")\n", - "print(df.columns)\n", - "\n", - "# Print the shape of the first few message vectors to verify\n", - "print(\"Shape of first few message vectors:\")\n", - "print(df['message_vector'].head().apply(lambda x: x.shape))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "6eQyNWIAW-ts", - "outputId": "7aa26ca7-cbe6-4ee2-982f-e219a01dda18" - }, - "execution_count": 6, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Parquet file read successfully\n", - "Converted to pandas DataFrame successfully\n", - "Converted message_vector_list to numpy arrays successfully\n", - "Final DataFrame columns:\n", - "Index(['@timestamp', 'host.hostname', 'host.ip', 'log.level',\n", - " 'winlog.event_id', 'winlog.task', 'message', 'filtered_message',\n", - " 'image', 'target_filename', 'parent_image', 'text', 'temp_folder',\n", - " 'filename', 'label', 'message_vector'],\n", - " dtype='object')\n", - "Shape of first few message vectors:\n", - "0 (6,)\n", - "1 (6,)\n", - "2 (6,)\n", - "3 (6,)\n", - "4 (6,)\n", - "Name: message_vector, dtype: object\n" - ] - } - ] + "id": "oyMG2LKK4LqU" + } }, { "cell_type": "markdown", @@ -4078,51 +8000,123 @@ { "cell_type": "code", "source": [ - "print(\"Polars Df\")\n", - "print(df_f.head())\n", - "print(df_f.schema)\n", - "print()\n", - "print(\"Pandas Df\")\n", - "print(df.info())\n", - "print(df.dtypes)" + "import polars as pl\n", + "import pandas as pd\n", + "\n", + "# Assuming df_f is your Polars DataFrame\n", + "try:\n", + " # Extract data from Polars DataFrame columns\n", + " data = {col: df_f[col].to_list() for col in df_f.columns}\n", + " # Create a Pandas DataFrame from the extracted data\n", + " df = pd.DataFrame(data)\n", + "except Exception as e:\n", + " print(f\"An error occurred: {e}\")\n", + "\n", + "# Display the Pandas DataFrame info and dtypes\n", + "if 'df' in locals():\n", + " print(\"Pandas DataFrame:\")\n", + " print(df.info())\n", + " print(df.dtypes)\n" ], "metadata": { "colab": { - "base_uri": "https://localhost:8080/", - "height": 236 + "base_uri": "https://localhost:8080/" }, "id": "9JjYJzacaD-T", - "outputId": "3f5a9112-2530-4f39-bd8b-8e11d0edb51d" + "outputId": "a80aa8c4-1624-438b-9407-135cf4f3c284" }, - "execution_count": 2, + "execution_count": 28, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Polars Df\n" - ] - }, - { - "output_type": "error", - "ename": "NameError", - "evalue": "name 'df_f' is not defined", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Polars Df\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Pandas Df\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'df_f' is not defined" + "Pandas DataFrame:\n", + "\n", + "RangeIndex: 13455 entries, 0 to 13454\n", + "Data columns (total 16 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 @timestamp 13455 non-null datetime64[ns, UTC]\n", + " 1 host.hostname 13455 non-null object \n", + " 2 host.ip 13455 non-null object \n", + " 3 log.level 13455 non-null object \n", + " 4 winlog.event_id 13455 non-null int64 \n", + " 5 winlog.task 13455 non-null object \n", + " 6 message 13455 non-null object \n", + " 7 filtered_message 13455 non-null object \n", + " 8 image 13455 non-null object \n", + " 9 target_filename 13455 non-null object \n", + " 10 parent_image 13455 non-null object \n", + " 11 text 13455 non-null object \n", + " 12 temp_folder 13455 non-null object \n", + " 13 filename 13455 non-null object \n", + " 14 label 13455 non-null object \n", + " 15 message_vector 13455 non-null object \n", + "dtypes: datetime64[ns, UTC](1), int64(1), object(14)\n", + "memory usage: 1.6+ MB\n", + "None\n", + "@timestamp datetime64[ns, UTC]\n", + "host.hostname object\n", + "host.ip object\n", + "log.level object\n", + "winlog.event_id int64\n", + "winlog.task object\n", + "message object\n", + "filtered_message object\n", + "image object\n", + "target_filename object\n", + "parent_image object\n", + "text object\n", + "temp_folder object\n", + "filename object\n", + "label object\n", + "message_vector object\n", + "dtype: object\n" ] } ] }, + { + "cell_type": "code", + "source": [ + "X = np.array(df['message_vector'].tolist())\n", + "print(X.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5NHDYuDAiUis", + "outputId": "2a639822-3cba-4e68-9124-9ec8af95c818" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(13455, 30000)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## TPOT for Supervised Learning with Algo stats" + ], + "metadata": { + "id": "Gf4Fu4cDs4pr" + } + }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import LabelEncoder\n", "from tpot import TPOTClassifier\n", - "from sklearn.metrics import f1_score\n", + "from sklearn.metrics import recall_score\n", "import numpy as np\n", "import pandas as pd\n", "from collections import defaultdict\n", @@ -4130,7 +8124,6 @@ "import re\n", "from tabulate import tabulate\n", "\n", - "\n", "# Assuming df is already loaded and contains 'message_vector' and 'label' columns\n", "\n", "# Encode labels\n", @@ -4145,7 +8138,7 @@ "results = defaultdict(list)\n", "\n", "# Number of runs\n", - "n_runs = 1\n", + "n_runs = 10\n", "\n", "# Function to extract number of features selected\n", "def get_n_features(pipeline_str):\n", @@ -4155,9 +8148,9 @@ " return int(X.shape[1] * percentile / 100)\n", " return X.shape[1] # If no feature selection, return all features\n", "\n", - "# Initialize best_tpot and best_f1\n", + "# Initialize best_tpot and best_recall\n", "best_tpot = None\n", - "best_f1 = 0\n", + "best_recall = 0\n", "\n", "for run in range(n_runs):\n", " print(f\"\\nStarting run {run + 1}/{n_runs}\")\n", @@ -4166,9 +8159,9 @@ " # Split data for this run\n", " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42 + run)\n", "\n", - " # TPOT classifier with f1 score as the metric\n", + " # TPOT classifier with recall as the metric\n", " tpot = TPOTClassifier(\n", - " scoring='f1_weighted', # Use weighted F1 score for multi-class problems\n", + " scoring='recall', # Use recall for single-label classification\n", " verbosity=2,\n", " generations=5,\n", " population_size=20,\n", @@ -4178,13 +8171,13 @@ " # Fit\n", " tpot.fit(X_train, y_train)\n", "\n", - " # Predict and calculate F1 score\n", + " # Predict and calculate recall score\n", " y_pred = tpot.predict(X_test)\n", - " f1 = f1_score(y_test, y_pred, average='weighted')\n", + " recall = recall_score(y_test, y_pred, average='macro') # 'macro' for single-label multi-class\n", "\n", - " # Update best_tpot if this run has better f1 score\n", - " if f1 > best_f1:\n", - " best_f1 = f1\n", + " # Update best_tpot if this run has better recall score\n", + " if recall > best_recall:\n", + " best_recall = recall\n", " best_tpot = tpot\n", "\n", " # Get pipeline string and extract number of features\n", @@ -4193,44 +8186,154 @@ "\n", " # Store results\n", " results['run'].append(run + 1)\n", - " results['f1_score'].append(f1)\n", + " results['recall_score'].append(recall)\n", " results['best_pipeline'].append(pipeline_str)\n", " results['n_features'].append(n_features)\n", " results['runtime'].append(time.time() - start_time)\n", " results['pipelines_tested'].append(tpot.evaluated_individuals_)\n", "\n", - " print(f\"Run {run + 1} completed. F1 Score: {f1:.4f}, Features selected: {n_features}, Pipelines tested: {len(tpot.evaluated_individuals_)}\")\n", - "\n" + " print(f\"Run {run + 1} completed. Recall Score: {recall:.4f}, Features selected: {n_features}, Pipelines tested: {len(tpot.evaluated_individuals_)}\")\n", + "\n", + "# Convert results to DataFrame\n", + "results_df = pd.DataFrame(results)\n", + "\n", + "# Print summary statistics\n", + "print(\"\\nSummary Statistics:\")\n", + "print(results_df.describe())\n", + "\n", + "# Save results to CSV\n", + "results_df.to_csv('tpot_recall_results.csv', index=False)\n", + "\n", + "print(\"\\nResults saved to 'tpot_recall_results.csv'\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", - "height": 289, + "height": 1000, "referenced_widgets": [ - "bcf5338c159d4d53bc3e39e717885292", - "7276e9b8b79d41ab991296d44521e2ee", - "f2ab86c6413649a595edf4b8feeb6a66", - "decc923894ab4ef4b35fa627b1b2dfb4", - "9875e07950114beca6741a51962c1f30", - "90db1bae92c94a49ab8bc9c12073e552", - "92a42873a8ef4c00ad24ef47a62b4093", - "1826f0b9003a4f8bb1c074f526560c86", - "549831432f244f5080c74eb842bae875", - "20be31d5be524d76bc2dbb3baad4edf3", - "fc71d71e57774cb1a0df69e82d3e7c2d" + "a336f820e5124f5d9e344bb8b0d12ee5", + "150475d8c96148eaa9d5230b85283e64", + "19f3e10b3dd94c71b9add7ee1d8f4c13", + "5aa33fe21abc482c997975ec5712d0da", + "0b51be1ad43c43fa89041fea2b062768", + "5ab992330571497ab2a07cd04841b9d3", + "4a8897c90c19427fa82afa4fa62f31da", + "7df01173ffee4067b1c7490fab0b571b", + "6bd42f421a4e4e60b2d7edc8784e07aa", + "09932ad0a1fe4fd196b38b16dc74f94a", + "f7354d5ee6e04705968e30d7a43ebbe7", + "feb69d6d248b4e2abf52d6622dd3638b", + "712ff38a74994c5082fe487de437ec67", + "81a29faa64d44f2c9a173a9213618f4c", + "35012b6363cf4ca88c4c5221d264ec25", + "598537621c514f51be27ebaf9bde7d54", + "825b3f67b44b4136a36909da95412031", + "8b121673d208412ab1f426a3ff1698ba", + "02a6753498b14c459016b7ff31c4b6d7", + "384c150f10e94ba78243d1a260e66887", + "bb1d1e093dec47f393c713548bfc6cc6", + "05b2a6fb28aa434a94c18c7d64cd55f1", + "a2f43127d721436185ba241b84cc87d7", + "3618c2d6264c4359a17bbdecc7db70d8", + "286cc95f7d6c47a6863c7fda02f83d3f", + "cabaca33a5cc4d0fb9fa99f42ece4167", + "153d243e01b24b5cad305ec4d886b922", + "e8bf60db6d1b47b2a6752fcceebad0e7", + "600f0f18ccaf4c89aa37feaa0b360f13", + "33f5284de07e4be29e4f39d5aaaa2d9b", + "4a850f0d51014dfa9b55c86d04707b24", + "ae8a589b32c44836894c6d3b708b896d", + "a57766432bb54d24a3869e0553c026d1", + "2cf8dcb41b3340cea65c251b3d8681d4", + "6e3a5bb9d6d7456982660f0edcc3b8c0", + "0bb2408ba21a481983c0a74f1411ef0a", + "4528e59b16d04228a5cc508fadb56a54", + "61072176986f4c9fb48f403c25ac3024", + "9881b9f569b3445897972c0340870318", + "f09971fa706c4509b3530edabeb47864", + "7510b9c108494e3dbe5ee031bf367e2b", + "2ed7ace57f89415fba714200fe44c2f9", + "bb51c5c7834c419a87a30752cd769d91", + "cc9bf86d64fc48f490a38fae5483ddb2", + "ed38c4b5280a4e0da6b3e979ca380db5", + "045cf04f33a643e8816a674d659cc252", + "c5b0b6bebd0b49e0b10116770251023e", + "c42b63c849f7469496fa292cc53efae3", + "a336fafd8e334185a39ca81268ca9f90", + "007b3fd39d1c480c959db4ed7abb37fe", + "5247fe5ea6724b15934a7142b8a8a8b1", + "ff008c746112461781825f85f212dd81", + "c290371939ed4a8999c1411b426448ed", + "09e3fa8828024d1cab95af2452cbf516", + "b1f5ea5f99b249dc9c8d2b26f43485f0", + "b41836beb11a4623b7fa6091494c0e85", + "d1fb8e94033f47d3b7123c513473519d", + "0f90f79a7f0d4bcbaa2ada2379b65f53", + "dedf553fc5c24b14a86a779a61a39be5", + "6566843282bc4bb59c7044ab3b812f40", + "fcefb4debd9a4445a94a9fc5847662e4", + "bbe6750092e44b2aafc5afb33e71ae88", + "50769ac7392e4bccaf83e32f8e5e3754", + "f202232d07f946ccaf899e672c2b7dd7", + "111571775b67440db61746dc6a653380", + "1fc51b4708134f18995b5dd73631446d", + "f466f42deeac4321b8b9768a11d6a755", + "06b74e83419b4d2b94913aeb490a7cb0", + "de16524e0e5d46f9a8b511fa82e748a8", + "e13204ee59ab400280347f23c0d31705", + "ad599c9ce9b04059b37c94dcae4b23a8", + "aeefdbc3453543baa3d6e72ccd15ee54", + "3a84a44443a944c399486902d4db6bdc", + "2e55913ae8944ef9923724a8351bacb4", + "dcc3e817b40643388a5f99a54fe13e43", + "272dc71a7ccf4608bfdea6a17524a886", + "5a3d943f85e34887aeb64a0e6b189f32", + "065f516618c041f1ba57df39d17cc95d", + "ca2767bb06444f03a1a31dd9e5216c45", + "1d9710db98c04adeb3855f4062301e24", + "57141f99793f45708db3961cf4178fc9", + "6c4c02ca0cb64050ac7e201a1a60be72", + "b6b5382bb2684e74a2c36b49f423eee3", + "a4a4a02a4332458789866a0e0e7839d3", + "871438bb5a0d4d31b3b8a0f18fcdac78", + "294ffc18963140ea96c01095e3a1300f", + "6dda83426ca749bd822d2bd0d39744ed", + "d37293f1d67f45babbe2a875df701c40", + "2ae5d11987c44076b95c1294af800c28", + "75c27d61248b477e9c58211b066ab62f", + "00628b308f4244c4ad533a67cb90ba43", + "851e8257d678458db2612a04803e8c17", + "8f472688c98745f28345f31e852b361b", + "f1b8071a183e47af81e8d96290ca7370", + "18d1acb1cdad46f1832c98ab44f0bc53", + "21abac8483874bb1acdc45f6e8f78b53", + "b4e4db272e35407899de20c7b30d1551", + "9d4143827e3f4e949cde68384a7beb59", + "aa805872f24140f6aa6ee2ac72b34b59", + "ed028f92fe6544159b14dcf220623223", + "2ff14125384a4f3cad97a03f9d2ff55f", + "d70eced834c64f399a3db48dcc19f802", + "b85cfd236fbc4c50b2572f0ff7ddea1c", + "b4e51caccd1e40baac5143667206d8cb", + "8031586f1f8d4dbbaf44708b12f4eb13", + "a2278a2947354727a76758cb4bf5e682", + "a2debbdff91649f29c7a579911090df4", + "7d4b85786ff04c9d843753c91c80f854", + "cb681559245a4d12bd4551bcfea063c4", + "0967c0fe1d9a4048b4e7b4266a75d893" ] }, "id": "usxaQgkSbEND", - "outputId": "1f3cbeaa-d197-4877-b4d1-3f0f7d035f27" + "outputId": "7ace5c69-7761-48c4-ab9f-ff2623cf9355" }, - "execution_count": 2, + "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", - "Starting run 1/1\n" + "Starting run 1/10\n" ] }, { @@ -4242,7 +8345,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "bcf5338c159d4d53bc3e39e717885292" + "model_id": "a336f820e5124f5d9e344bb8b0d12ee5" } }, "metadata": {} @@ -4252,22 +8355,359 @@ "name": "stdout", "text": [ "\n", - "Generation 1 - Current best internal CV score: 0.9876147693616538\n", + "Generation 1 - Current best internal CV score: 1.0\n", "\n", - "Generation 2 - Current best internal CV score: 0.9876147693616538\n", + "Generation 2 - Current best internal CV score: 1.0\n", "\n", - "Generation 3 - Current best internal CV score: 0.9876147693616538\n", + "Generation 3 - Current best internal CV score: 1.0\n", "\n", - "Generation 4 - Current best internal CV score: 0.9876147693616538\n", + "Generation 4 - Current best internal CV score: 1.0\n", "\n", - "Generation 5 - Current best internal CV score: 0.9876147693616538\n", + "Generation 5 - Current best internal CV score: 1.0\n", "\n", "Best pipeline: XGBClassifier(input_matrix, learning_rate=0.001, max_depth=9, min_child_weight=7, n_estimators=100, n_jobs=1, subsample=0.45, verbosity=0)\n", - "Run 1 completed. F1 Score: 0.9861, Features selected: 6, Pipelines tested: 117\n" + "Run 1 completed. Recall Score: 0.5000, Features selected: 6, Pipelines tested: 117\n", + "\n", + "Starting run 2/10\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Optimization Progress: 0%| | 0/120 [00:00" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAb+CAYAAACv+ei6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADxK0lEQVR4nOzdeZxO9f//8ec1Y3Yz1rGPMYay7/GRPctky5IoypCtIqT40GLLkor4IFEflGhDlAqTNZGsLbZkiY9tKAwmY8y8f3/4zfV1mcWM5m0u5nG/3eZ2c97nfc55n+u8rrl5ztkcxhgjAAAAAABghUdWDwAAAAAAgLsZwRsAAAAAAIsI3gAAAAAAWETwBgAAAADAIoI3AAAAAAAWEbwBAAAAALCI4A0AAAAAgEUEbwAAAAAALCJ4AwAAAABgEcEbAOD2rl69qiFDhigkJEQeHh5q27ZtVg/pjpeYmKgKFSpo7NixWT2UO8bQoUNVq1atrB4GAOAORPAGgNvM4XCk62ft2rU6fPiwS5unp6eKFy+udu3aaefOncnWfenSJb366quqVKmS/P39lStXLtWrV08ffPCBjDHOft26dUvXGLp165bqfowcOdKlr7+/v8qVK6eXX35ZMTExmfqZzZ49W2+88YY6dOig999/X88991ymrj87+uijj3T06FH169fP2TZ37txUa2Ho0KHOfitXrlSPHj1UoUIFeXp6qkSJEhna9sWLFzVixAhVqFBBAQEBypcvn6pUqaIBAwbo+PHjmbWLmW7gwIH66aef9MUXX2R42Zo1a8rhcGjGjBkWRpb1bvxd5eHhobx586p58+batGlTVg8PALJcjqweAABkN/PmzXOZ/uCDDxQVFZWsvWzZsvr7778lSY899phatGihhIQE7dmzRzNmzNA333yjH374QVWqVJEknTp1So0bN9aePXv06KOPql+/frp8+bIWLVqkyMhIff3115o/f748PT3Vp08fNWnSxLmtQ4cOafjw4erdu7fq1avnbA8PD7/p/syYMUM5c+bUxYsXtXLlSo0dO1arV6/W999/L4fDcasfk4vVq1eraNGieuuttzJlfZDeeOMNPfroo8qVK1eyeaNHj1ZYWJhLW4UKFZz/XrBggT755BNVq1ZNRYoUydB24+PjVb9+fe3du1eRkZF69tlndfHiRe3atUsLFixQu3btMrzO26VQoUJq06aN3nzzTT300EPpXm7//v3asmWLSpQoofnz5+vpp5+2OMqsdf3vqt9++01vv/22GjVqpC1btqhixYpZPTwAyDoGAJCl+vbta1L7dXzo0CEjybzxxhsu7V988YWRZHr37u1si4iIMB4eHmbp0qXJ1vPCCy8YSea1115LcTtbtmwxksycOXPSPe4RI0YYSeb06dMu7e3btzeSzMaNG9O9rpQkJiaa2NhYY4wxjRo1MuXLl/9H67teQkKC+fvvvzNtfXea7du3G0nm22+/dWmfM2eOkWS2bNmS5vLHjh0zV65cMcYY07JlSxMaGprubX/66adGkpk/f36yeX///bc5f/58utf1T128eDHDyyxcuNA4HA5z4MCBdC8zfPhwU6BAAbNo0SLjcDjMoUOHMrzd1NzKPtiQ2u+qb775xkgyTz/9dBaNDADcA5eaA8Ad6IEHHpB07Uy1JP3www9asWKFunXrluKZuPHjx6t06dKaMGGC8yz67RpbYmKiJk+erPLly8vX11cFCxZUnz59dPbsWZflSpQooVatWmnFihWqUaOG/Pz8NHPmTDkcDq1Zs0a7du1yuQxfunZp/fPPP6+QkBD5+Pjo3nvv1ZtvvulyWb107fL+fv36af78+Spfvrx8fHy0fPly56XVGzZsUP/+/RUcHKzcuXOrT58+unLlis6dO6euXbsqT548ypMnj4YMGZJs3W+++abuv/9+5cuXT35+fqpevboWLlyY7HNJGsOSJUtUoUIF+fj4qHz58lq+fHmyvseOHVOPHj1UpEgR+fj4KCwsTE8//bSuXLni7HPu3DkNHDjQue+lSpXShAkTlJiYeNNjtGTJEnl7e6t+/fo37ZuSIkWKyMvL65aWPXDggCSpTp06yeb5+voqKCjIpW3v3r3q2LGjgoOD5efnp3vvvVcvvfSSS58dO3aoefPmCgoKUs6cOdW4cWP98MMPLn2SjvW6dev0zDPPqECBAipWrJhz/jfffKN69eopICBAgYGBatmypXbt2pVsjElXiixdujTd+7xgwQJ16NBBrVq1Uq5cubRgwYIU+23evFktWrRQnjx5FBAQoEqVKmnKlCnO+d26dVPOnDl14MABtWjRQoGBgerSpYuk9H8XoqKiVLduXeXOnVs5c+bUvffeqxdffNGlz9SpU1W+fHn5+/srT548qlGjRqpjvpmkK2iSjrv0f7ep3CjpGB0+fNjZlvR7YcOGDapZs6Z8fX1VsmRJffDBBy7LxsfHa9SoUSpdurR8fX2VL18+1a1bV1FRUbc0bgDIbFxqDgB3oKT/xObLl0+S9OWXX0qSunbtmmL/HDlyqHPnzho1apS+//57l8vMbY+tT58+mjt3rrp3767+/fvr0KFDmjZtmnbs2KHvv//eJcDt27dPjz32mPr06aNevXqpWLFimjdvnsaOHauLFy9q/Pjxkq5dhm+M0UMPPaQ1a9aoR48eqlKlilasWKHBgwfr2LFjyS5LX716tT799FP169dP+fPnV4kSJZz3yT/77LMqVKiQRo0apR9++EGzZs1S7ty5tXHjRhUvXlzjxo3T119/rTfeeEMVKlRw+ZynTJmihx56SF26dNGVK1f08ccf65FHHtGyZcvUsmVLlzFs2LBBixcv1jPPPKPAwED95z//0cMPP6wjR444P6/jx4+rZs2aOnfunHr37q0yZcro2LFjWrhwoWJjY+Xt7a3Y2Fg1aNBAx44dU58+fVS8eHFt3LhRw4YN04kTJzR58uQ0j9HGjRtVoUKFVMPz+fPndebMGZe2/Pnzp7nO9AoNDZV07RaLl19+Oc3bEX7++WfVq1dPXl5e6t27t0qUKKEDBw7oyy+/dD4UbteuXapXr56CgoI0ZMgQeXl5aebMmWrYsKHWrVuX7GFozzzzjIKDgzV8+HBdunRJ0rXbPyIjIxUREaEJEyYoNjZWM2bMUN26dbVjxw6Xe9hz5cql8PBwff/99+l61sDmzZv1+++/a86cOfL29lb79u01f/78ZGE3KipKrVq1UuHChTVgwAAVKlRIe/bs0bJlyzRgwABnv6tXryoiIkJ169bVm2++KX9//3R/F3bt2qVWrVqpUqVKGj16tHx8fPT777/r+++/d67/3XffVf/+/dWhQwcNGDBAly9f1s8//6zNmzerc+fON93fGyWF6Dx58mR42SS///67OnTooB49eigyMlKzZ89Wt27dVL16dZUvX17StTA/fvx49ezZUzVr1lRMTIy2bt2q7du3q2nTpre8bQDINFl6vh0AkK5LzUeNGmVOnz5tTp48adauXWuqVq1qJJlFixYZY4xp27atkWTOnj2b6nYWL15sJJn//Oc/yeb9k0vN9+3bZ06fPm0OHTpkZs6caXx8fEzBggXNpUuXzHfffZfiZcXLly9P1h4aGmokmeXLlyfbVoMGDZJdar5kyRIjyYwZM8alvUOHDsbhcJjff//d2SbJeHh4mF27drn0Tbq0OiIiwiQmJjrba9eubRwOh3nqqaecbVevXjXFihUzDRo0cFlH0uXwSa5cuWIqVKhgHnjgAZd2Scbb29tlXD/99JORZKZOneps69q1q/Hw8Ejxcu+kMb766qsmICDA/Pbbby7zhw4dajw9Pc2RI0eSLXu9YsWKmYcffjhZe9LnkdJPajJ6qXlsbKy59957jSQTGhpqunXrZv773/+aU6dOJetbv359ExgYaP744w+X9uuPVdu2bY23t7fLpd/Hjx83gYGBpn79+sn2rW7duubq1avO9gsXLpjcuXObXr16uWzj5MmTJleuXMnajTGmWbNmpmzZsuna3379+pmQkBDnmFeuXGkkmR07djj7XL161YSFhZnQ0NBk3+Hr9zUyMtJIMkOHDnXpk97vwltvvZXi7SHXa9OmzS3d1pHS76rvvvvO3HfffUaS+eyzz5x9k3533CjpGF1/KX7S74X169c726Kjo42Pj495/vnnnW2VK1c2LVu2zPC4AeB24VJzALgDjBgxQsHBwSpUqJAaNmyoAwcOaMKECWrfvr0k6cKFC5KkwMDAVNeRNC+znzh+7733Kjg4WGFhYerTp49KlSqlr776Sv7+/vrss8+UK1cuNW3aVGfOnHH+VK9eXTlz5tSaNWtc1hUWFqaIiIh0bffrr7+Wp6en+vfv79L+/PPPyxijb775xqW9QYMGKleuXIrr6tGjh8uZ11q1askYox49ejjbPD09VaNGDR08eNBlWT8/P+e/z549q/Pnz6tevXravn17su00adLE5YF1lSpVUlBQkHOdiYmJWrJkiVq3bq0aNWokWz5pjJ999pnq1aunPHnyuHyuTZo0UUJCgtavX5/ifib5888/0zwDOX36dEVFRbn8ZBY/Pz9t3rxZgwcPlnTt8uIePXqocOHCevbZZxUXFydJOn36tNavX68nn3xSxYsXd1lH0ueQkJCglStXqm3btipZsqRzfuHChdW5c2dt2LAhWb336tVLnp6ezumoqCidO3dOjz32mMtn6enpqVq1aiWrUUnOz/1mrl69qk8++USdOnVyjvmBBx5QgQIFNH/+fGe/HTt26NChQxo4cKBy586d4r5e78aHs6X3u5C07qVLl6Z6S0Lu3Ln1v//9T1u2bLnp/qXk+t9V9erV0549ezRx4kR16NDhltYnSeXKlXN56GNwcLDuvfdel+9i7ty5tWvXLu3fv/+WtwMANnGpOQDcAXr37q1HHnlEHh4eyp07t/M+5SRJofrChQvJ/uOeJD3h/FYsWrRIQUFB8vLyUrFixVyC5f79+3X+/HkVKFAgxWWjo6Ndpm98knZa/vjjDxUpUiTZ/pQtW9Y5P73rvjHYJT3pOyQkJFn7jfemL1u2TGPGjNHOnTudoVFKOTDduB3pWohLWufp06cVExPj8gTxlOzfv18///yzgoODU5x/4+eaEnPDvb/Xq1mzZorBP7PkypVLr7/+ul5//XX98ccfWrVqld58801NmzZNuXLl0pgxY5yhKq3P4vTp04qNjdW9996bbF7ZsmWVmJioo0ePOi9HlpLXQVJQS3o2wY1uvOdcuvbZpeeJ/StXrtTp06dVs2ZN/f777872Ro0a6aOPPtKECRPk4eHhvD3jZsddunbbyPX3pkvp/y506tRJ7733nnr27KmhQ4eqcePGat++vTp06CAPj2vnYv7973/r22+/Vc2aNVWqVCk1a9ZMnTt3TvGe/JQk/a66fPmyVq9erf/85z9KSEhI17Kpudn3Rrr2JP42bdronnvuUYUKFfTggw/qiSeeUKVKlf7RtgEgsxC8AeAOULp06TTvyy5btqyWLFmin3/+OdUHZv3888+SlOpZ31tVv379VO//TUxMTHZ273o3Bsfrzx5ntrTWff0Z0Ju1Xx9Yv/vuOz300EOqX7++3n77bRUuXFheXl6aM2dOig+jSm07aYXglCQmJqpp06YaMmRIivPvueeeNJfPly9fsj8gZJXQ0FA9+eSTateunUqWLKn58+drzJgx1rZ3Yx0knfmdN2+eChUqlKx/jhzJ/6t09uzZdN3znlT3HTt2THH+unXr1KhRo5uu53o+Pj7OkJxRfn5+Wr9+vdasWaOvvvpKy5cv1yeffKIHHnhAK1eulKenp8qWLat9+/Zp2bJlWr58uRYtWqS3335bw4cP16hRo266jet/V7Vq1Uqenp4aOnSoGjVq5PxjTmp/tEgtoKfne1O/fn0dOHBAS5cu1cqVK/Xee+/prbfe0jvvvKOePXvedNwAYBvBGwDuAq1atdL48eP1wQcfpBi8ExIStGDBAuXJkyfdZ64yQ3h4uL799lvVqVMn00N1aGiovv32W124cMHlTN/evXud821btGiRfH19tWLFCpcrEObMmXNL6wsODlZQUJB+/fXXNPuFh4fr4sWLt/yQvDJlyjifOu8u8uTJo/DwcOe+J106ntZnERwcLH9/f+3bty/ZvL1798rDwyPZVQs3SrpCo0CBAun+PA8dOqTKlSun2efSpUtaunSpOnXqlOJl1v3799f8+fPVqFEj5xh+/fXXWzqmGfkueHh4qHHjxmrcuLEmTZqkcePG6aWXXtKaNWuc2w4ICFCnTp3UqVMnXblyRe3bt9fYsWM1bNgw+fr6ZmhsL730kt599129/PLLzif4J93mcO7cOZcrdG68SiWj8ubNq+7du6t79+66ePGi6tevr5EjRxK8AbgF7vEGgLvA/fffryZNmmjOnDlatmxZsvkvvfSSfvvtNw0ZMsTqWeUbdezYUQkJCXr11VeTzbt69arOnTt3y+tu0aKFEhISNG3aNJf2t956Sw6HQ82bN7/ldaeXp6enHA6Hy5m6w4cPa8mSJbe0Pg8PD7Vt21Zffvmltm7dmmx+0hm+jh07atOmTVqxYkWyPufOndPVq1fT3E7t2rX166+/ulwaf7v89NNPKd4f/ccff2j37t3Oy8aDg4NVv359zZ49W0eOHHHpm/Q5eHp6qlmzZlq6dKnLK6hOnTqlBQsWqG7duileKn69iIgIBQUFady4cYqPj082//Tp0y7T58+f14EDB3T//fenud7PP/9cly5dUt++fdWhQ4dkP61atdKiRYsUFxenatWqKSwsTJMnT072nUjP1RDp/S789ddfyZatUqWKJDlr4c8//3SZ7+3trXLlyskYk+LnczNJr+dbsWKF8y0CSX9ouP5ZBJcuXdL777+f4fUnuXHcOXPmVKlSpbKkxgEgJZzxBoC7xAcffKDGjRurTZs26ty5s+rVq6e4uDgtXrxYa9euVadOnZwPtLpdGjRooD59+mj8+PHauXOnmjVrJi8vL+3fv1+fffaZpkyZcssPXWrdurUaNWqkl156SYcPH1blypW1cuVKLV26VAMHDnS519yWli1batKkSXrwwQfVuXNnRUdHa/r06SpVqpTz0v6MGjdunFauXKkGDRqod+/eKlu2rE6cOKHPPvtMGzZsUO7cuTV48GB98cUXatWqlfO1SpcuXdIvv/yihQsX6vDh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mzevZs6cqQceeEATJkzQ/Pnz9cILL+i+++5T/fr1XZYfO3asHA6H/v3vfys6OlqTJ09WkyZNtHPnTueZttWrV6t58+aqXr26RowYIQ8PD82ZM0cPPPCAvvvuO9WsWdNlnY888ohKly6tcePGyRiT6thPnTql+++/X7Gxserfv7/y5cun999/Xw899JAWLlyodu3aqX79+po3b56eeOKJFC8fT83ly5d15swZl7bAwED5+Pjo1KlT+te//iWHw6F+/fopODhY33zzjXr06KGYmBgNHDhQkhQTE6P33ntPjz32mHr16qULFy7ov//9ryIiIvTjjz+qSpUqCg4O1owZM/T000+rXbt2at++vSSpUqVK6RrnjebMmaPLly+rd+/e8vHxUd68ebVr1y7VqVNHRYsW1dChQxUQEKBPP/1Ubdu21aJFi9SuXTtJ1/7wMX78ePXs2VM1a9ZUTEyMtm7dqu3bt6tp06apbjM0NFTffvutVq9erQceeCDN8c2bN0+RkZGKiIjQhAkTFBsbqxkzZqhu3brasWOHS7C60dixY/XKK6+oY8eO6tmzp06fPq2pU6eqfv362rFjh/OKhqioKLVq1UqFCxfWgAEDVKhQIe3Zs0fLli3TgAED1KdPHx0/flxRUVGaN29esu306dNHc+fOVffu3dW/f38dOnRI06ZN044dO/T999/Ly8tLkjR8+HCNGTNGLVq0UIsWLbR9+3Y1a9ZMV65cuclR+j8fffSRAgIC1KpVK/n5+Sk8PFzz58/X/fff79Jv1KhRGjlypO6//36NHj1a3t7e2rx5s1avXq1mzZo5++3bt0+PPfaY+vTpo169eunee+9N1/dEkt599131799fHTp00IABA3T58mX9/PPP2rx5szp37ixJeuqpp7Rw4UL169dP5cqV059//qkNGzZoz549qlatWrr3O0lS8M2TJ0+Gl02yYMECXbhwQX369JHD4dDrr7+u9u3b6+DBg85j9fDDD2vXrl169tlnVaJECUVHRysqKkpHjhxJs+YA4LYyAIAsMWfOHCPJbNmyxRw4cMDkyJHD9O/f3zm/QYMGpnz58s7pQ4cOGUlmzpw5ydYlyYwYMcI5PWLECCPJ9O7d29l29epVU6xYMeNwOMxrr73mbD979qzx8/MzkZGRzrY1a9YYSaZo0aImJibG2f7pp58aSWbKlCnGGGMSExNN6dKlTUREhElMTHT2i42NNWFhYaZp06bJxvTYY4+l6/MZOHCgkWS+++47Z9uFCxdMWFiYKVGihElISHDZ/759+6ZrvZJS/En6XHv06GEKFy5szpw547Lco48+anLlymViY2ONMdc+z7i4OJc+Z8+eNQULFjRPPvmks+306dPJjk+SBg0amAYNGiRrj4yMNKGhoc7ppGMfFBRkoqOjXfo2btzYVKxY0Vy+fNnZlpiYaO6//35TunRpZ1vlypVNy5Yt0/xsUvLrr78aPz8/I8lUqVLFDBgwwCxZssRcunTJpd+FCxdM7ty5Ta9evVzaT548aXLlyuXSnlQLSQ4fPmw8PT3N2LFjXZb95ZdfTI4cOZztV69eNWFhYSY0NNScPXvWpe/19de3b1+T0n9xvvvuOyPJzJ8/36V9+fLlLu3R0dHG29vbtGzZ0mW9L774opHk8l1JS8WKFU2XLl1cls+fP7+Jj493tu3fv994eHiYdu3audT0jfsUGhpqJJnly5e79Env96RNmzYuv09SkitXrnR/j66X9Lvs22+/NadPnzZHjx41CxcuNMHBwcbHx8ccPXrU2TejNZ8vXz7z119/OduXLl1qJJkvv/zSGHPtOyfJvPHGGxkeNwDcTlxqDgBuoGTJknriiSc0a9YsnThxItPW27NnT+e/PT09VaNGDRlj1KNHD2d77ty5de+99+rgwYPJlu/atasCAwOd0x06dFDhwoX19ddfS5J27typ/fv3q3Pnzvrzzz915swZnTlzRpcuXVLjxo21fv16JSYmuqzzqaeeStfYv/76a9WsWdPlcvScOXOqd+/eOnz4sPMy61vRpk0bRUVFufxERETIGKNFixapdevWMsY49+fMmTOKiIjQ+fPnnZfdenp6Ou+vTkxM1F9//aWrV6+qRo0at3xp7s08/PDDzkvXJemvv/7S6tWr1bFjR124cME51j///FMRERHav3+/86nSuXPn1q5du7R///4MbbN8+fLauXOnHn/8cR0+fFhTpkxR27ZtVbBgQb377rvOflFRUTp37pwee+wxl8/N09NTtWrVcrkE/0aLFy9WYmKiOnbs6LJsoUKFVLp0aeeyO3bs0KFDhzRw4MBk9/Sn5xaDzz77TLly5VLTpk1dtlO9enXlzJnTuZ1vv/1WV65c0bPPPuuy3qSrHdLj559/1i+//KLHHnvM2Zb02axYscLZtmTJEiUmJmr48OHy8HD9b9mN+xQWFqaIiAiXtvR+T3Lnzq3//e9/yS7Tvl7u3Lm1efNmHT9+PN37eb0mTZooODhYISEh6tChgwICAvTFF1+oWLFit7Q+6dpVO9efMU+6fD3p95Wfn5+8vb21du3aZLcLAIA74VJzAHATL7/8subNm6fXXnvNeb/qP1W8eHGX6Vy5csnX11f58+dP1v7nn38mW7506dIu0w6HQ6VKlXJeQpoU4iIjI1Mdw/nz513+4xwWFpausf/xxx+qVatWsvayZcs659/q69aKFSumJk2aJGuPjo7WuXPnNGvWLM2aNSvFZa9/oNj777+viRMnau/evYqPj3e2p3cfM+rG9f7+++8yxuiVV17RK6+8kup4ixYtqtGjR6tNmza65557VKFCBT344IN64okn0nXZ+z333KN58+YpISFBu3fv1rJly/T666+rd+/eCgsLU5MmTZy1kNrl6EFBQamuf//+/TLGJKu3JEmXFCfdK3yrx33//v06f/58ivemS/93bP/44w9Jyes/ODg43ZdNf/jhhwoICFDJkiX1+++/S5J8fX1VokQJzZ8/Xy1btpR0bZ88PDxUrly5m64zpbpK7/fk3//+t7799lvVrFlTpUqVUrNmzdS5c2fVqVPHuczrr7+uyMhIhYSEqHr16mrRooW6du2qkiVLpmufp0+frnvuuUfnz5/X7NmztX79evn4+KRr2dTc+Dss6fNPCtk+Pj6aMGGCnn/+eRUsWFD/+te/1KpVK3Xt2tXaKwIB4FYQvAHATZQsWVKPP/64Zs2apaFDhyabn9oZvYSEhFTX6enpma42SWneb52apLPZb7zxhqpUqZJin5w5c7pMu9NTmG+UtD+PP/54qn9MSAqqH374obp166a2bdtq8ODBKlCggDw9PTV+/HiXh0mlJenBcDdK7Zje+NkljfeFF15IdiY0SalSpSRJ9evX14EDB7R06VKtXLlS7733nt566y298847LldGpMXT01MVK1ZUxYoVVbt2bTVq1Ejz589XkyZNnGOZN29eioEnR47U/8uRmJgoh8Ohb775JsX6vLGGblViYqIKFCig+fPnpzj/+qsJ/gljjD766CNdunQpxUAdHR2tixcvZni//sl3p2zZstq3b5+WLVum5cuXa9GiRXr77bc1fPhw5yvhOnbsqHr1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iaZmpuhHLZdxJcslUyyXVBTDRMMdAcUR3r8//DFfxwEEZg68Bx6P65rr4tznvO/7PnNeMxfPOVuBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIAClX3wfv3113PwwQenY8eOad26dfr06ZMnnnhigdu/8cYbOfDAA7PuuuumWbNmOfHEE5feZAEAAOALyjp4v/fee9l6661TWVmZO++8M88991zOP//8rLrqqgv8zOzZs9OpU6ecdtpp6du371KcLQAAANTXYllPYGHOOeecdO3aNVdddVVtW48ePRb6me7du+fCCy9MkvzmN78pdH4AAADwZcr6jPdtt92WzTffPN/61rey+uqrp3///rniiiuW9bQAAABgkZX1Ge9XXnkll156aYYPH54f/vCH+dvf/pbjjz8+LVu2zNChQxttnNmzZ2f27Nm1y9OnT0+S1NTUpKamptHGoTzNO8aONeVEXVJu1CTlSF1SbtTkimVxjnNFqVQqFTiXBmnZsmU233zz/PWvf61tO/744/O3v/0tjzzyyJd+fuDAgenXr1/Gjh270O1GjRqV0aNH12u//vrr06ZNm8WeNwAAAMu3WbNm5cADD8wHH3yQdu3aLXTbsj7jvcYaa2TDDTes07bBBhvk5ptvbtRxRo4cmeHDh9cuT58+PV27ds1OO+30pd9Amr6amppUV1dn0KBBqaysXNbTgSTqkvKjJilH6pJyoyZXLPOulF4UZR28t95667zwwgt12l588cV069atUcepqqpKVVVVvfbKyko/MCsQx5typC4pN2qScqQuKTdqcsWwOMe4rIP3sGHDstVWW+WnP/1p9t133zz++OO5/PLLc/nll9duM3LkyLz++uu55ppratsmTpyYJJkxY0beeuutTJw4MS1btqx39hwAAACKVtbB+6tf/WpuueWWjBw5MmeddVZ69OiRsWPH5qCDDqrd5o033siUKVPqfK5///61//773/+e66+/Pt26dcurr766tKYOAAAASco8eCfJ7rvvnt13332B68eNG1evrYyfFwcAAMAKpqzf4w0AAABNneANAAAABRK8AQAAoEBLLXi///77S2soAAAAKBuFBO9zzjknv//972uX991333Ts2DFrrrlmnn766SKGBAAAgLJUSPC+7LLL0rVr1yRJdXV1qqurc+edd2bw4ME5+eSTixgSAAAAylIhrxN78803a4P3HXfckX333Tc77bRTunfvnq997WtFDAkAAABlqZAz3quuumpee+21JMldd92VHXfcMcln79eeM2dOEUMCAABAWSrkjPeQIUNy4IEHpnfv3nnnnXcyePDgJMlTTz2VXr16FTEkAAAAlKVCgvfPf/7zdO/ePa+99lrOPffcrLTSSkmSN954I9/97neLGBIAAADKUiHBu7KyMieddFK99mHDhhUxHAAAAJStwt7j/dvf/jYDBgxIly5d8u9//ztJMnbs2Pzf//1fUUMCAABA2SkkeF966aUZPnx4Bg8enPfff7/2gWrt27fP2LFjixgSAAAAylIhwfuiiy7KFVdckR/96Edp3rx5bfvmm2+ef/7zn0UMCQAAAGWpkOA9efLk9O/fv157VVVVZs6cWcSQAAAAUJYKCd49evTIxIkT67Xfdddd2WCDDYoYEgAAAMpSIU81Hz58eI477rh8/PHHKZVKefzxx/O73/0uY8aMya9//esihgQAAICyVEjwPvLII9O6deucdtppmTVrVg488MB06dIlF154Yfbff/8ihgQAAICy1OjB+9NPP83111+fnXfeOQcddFBmzZqVGTNmZPXVV2/soQAAAKDsNfo93i1atMixxx6bjz/+OEnSpk0boRsAAIAVViEPV9tiiy3y1FNPFdE1AAAANCmF3OP93e9+Nz/4wQ/yn//8J5tttlnatm1bZ/0mm2xSxLAAAABQdgoJ3vMeoHb88cfXtlVUVKRUKqWioiJz5swpYlgAAAAoO4UE78mTJxfRLQAAADQ5hQTvbt26FdEtAAAANDmFBO9rrrlmoesPPfTQIoYFAACAslNI8D7hhBPqLNfU1GTWrFlp2bJl2rRpI3gDAACwwijkdWLvvfdena8ZM2bkhRdeyIABA/K73/2uiCEBAACgLBUSvOend+/e+dnPflbvbDgAAAAsz5Za8E6SFi1aZOrUqUtzSAAAAFimCrnH+7bbbquzXCqV8sYbb+Tiiy/O1ltvXcSQAAAAUJYKCd577bVXneWKiop06tQp22+/fc4///wihgQAAICyVEjwnjt3bhHdAgAAQJNTyD3eZ511VmbNmlWv/aOPPspZZ51VxJAAAABQlgoJ3qNHj86MGTPqtc+aNSujR48uYkgAAAAoS4UE71KplIqKinrtTz/9dDp06FDEkAAAAFCWGvUe71VXXTUVFRWpqKjIuuuuWyd8z5kzJzNmzMixxx7bmEMCAABAWWvU4D127NiUSqV8+9vfzujRo7PKKqvUrmvZsmW6d++eLbfcsjGHBAAAgLLWqMF76NChSZIePXpkq622SmVlZWN2DwAAAE1OIa8T23bbbWv//fHHH+eTTz6ps75du3ZFDAsAAABlp5CHq82aNSvf+973svrqq6dt27ZZddVV63wBAADAiqKQ4H3yySfn/vvvz6WXXpqqqqr8+te/zujRo9OlS5dcc801RQwJAAAAZamQS81vv/32XHPNNRk4cGAOP/zwfP3rX0+vXr3SrVu3XHfddTnooIOKGBYAAADKTiFnvN99992ss846ST67n/vdd99NkgwYMCATJkwoYkgAAAAoS4UE73XWWSeTJ09Okqy//vq58cYbk3x2Jrx9+/ZFDAkAAABlqZDgffjhh+fpp59OkowYMSKXXHJJWrVqlWHDhuXkk08uYkgAAAAoS4Xc4z1s2LDaf++4447517/+lb///e/p1atXNtlkkyKGBAAAgLJUSPD+vI8//jjdunVLt27dih4KAAAAyk4hl5rPmTMnP/7xj7PmmmtmpZVWyiuvvJIkOf3003PllVcWMSQAAACUpUKC99lnn51x48bl3HPPTcuWLWvbN9544/z6178uYkgAAAAoS4UE72uuuSaXX355DjrooDRv3ry2vW/fvvnXv/5VxJAAAABQlgoJ3q+//np69epVr33u3LmpqakpYkgAAAAoS4UE7w033DB//vOf67XfdNNN6d+/fxFDAgAAQFkq5KnmZ5xxRoYOHZrXX389c+fOzfjx4/PCCy/kmmuuyR133FHEkAAAAFCWCjnjveeee+b222/Pvffem7Zt2+aMM87I888/n9tvvz2DBg0qYkgAAAAoS416xvuVV15Jjx49UlFRka9//euprq5uzO4BAACgyWnUM969e/fOW2+9Vbu833775b///W9jDgEAAABNSqMG71KpVGf5T3/6U2bOnNmYQwAAAECTUsg93gAAAMBnGjV4V1RUpKKiol4bAAAArKga9eFqpVIphx12WKqqqpIkH3/8cY499ti0bdu2znbjx49vzGEBAACgbDVq8B46dGid5YMPPrgxuwcAAIAmp1GD91VXXdWY3QEAAECT5+FqAAAAUCDBGwAAAAokeAMAAECBBG8AAAAoUKMF70033TTvvfdekuSss87KrFmzGqXf119/PQcffHA6duyY1q1bp0+fPnniiScW+pkHH3wwm266aaqqqtKrV6+MGzeuUeYCACukOXNS8dBDWXPChFQ89FAyZ86ynhEANCmNFryff/75zJw5M0kyevTozJgxo8F9vvfee9l6661TWVmZO++8M88991zOP//8rLrqqgv8zOTJk7Pbbrtlu+22y8SJE3PiiSfmyCOPzN13393g+QDACmf8+KR797QYNCibX3BBWgwalHTv/lk7ALBIGu11Yv369cvhhx+eAQMGpFQq5bzzzstKK600323POOOMRerznHPOSdeuXeu8pqxHjx4L/cxll12WHj165Pzzz0+SbLDBBnn44Yfz85//PDvvvPMi7g0AkPHjk332SUqluu2vv/5Z+003JUOGLJu5AUAT0mhnvMeNG5eOHTvmjjvuSEVFRe68887ccsst9b5uvfXWRe7ztttuy+abb55vfetbWX311dO/f/9cccUVC/3MI488kh133LFO284775xHHnlkSXYLAFZMc+YkJ5xQP3Qn/6/txBNddg4Ai6DRznivt956ueGGG5IkzZo1y3333ZfVV1+9QX2+8sorufTSSzN8+PD88Ic/zN/+9rccf/zxadmyZYYOHTrfz7z55pv5yle+UqftK1/5SqZPn56PPvoorVu3rveZ2bNnZ/bs2bXL06dPT5LU1NSkpqamQftA+Zt3jB1ryom6ZFmreOihtPjPfxa8QamUvPZaPn3ggZS23XbpTQw+x+9Kyo2aXLEsznFutOD9eXPnzm20fjbffPP89Kc/TZL0798/zzzzTC677LIFBu8lMWbMmIwePbpe+z333JM2bdo02jiUt+rq6mU9BahHXbKsrDlhQjZfhO0m3nlnXv//n/ECy4rflZQbNbliWJwHihcSvJPk5ZdfztixY/P8888nSTbccMOccMIJ6dmz5yL3scYaa2TDDTes07bBBhvk5ptvXuBnOnfunP/+97912v773/+mXbt28z3bnSQjR47M8OHDa5enT5+erl27Zqeddkq7du0Web40TTU1Namurs6gQYNSWVm5rKcDSdQly15F27bJBRd86Xb9Bg9OX2e8WUb8rqTcqMkVy7wrpRdFIcH77rvvzje+8Y3069cvW2+9dZLkL3/5SzbaaKPcfvvtGTRo0CL1s/XWW+eFF16o0/biiy+mW7duC/zMlltumT/96U912qqrq7Plllsu8DNVVVWpqqqq115ZWekHZgXieFOO1CXLzHbbJWut9dmD1OZ3n3dFRbLWWmmx3XZJ8+ZLf37wOX5XUm7U5IphcY5xoz1c7fNGjBiRYcOG5bHHHssFF1yQCy64II899lhOPPHEnHrqqYvcz7Bhw/Loo4/mpz/9aSZNmpTrr78+l19+eY477rjabUaOHJlDDz20dvnYY4/NK6+8klNOOSX/+te/8stf/jI33nhjhg0b1qj7CADLtebNkwsv/OzfFRV1181bHjtW6AaARVBI8H7++edzxBFH1Gv/9re/neeee26R+/nqV7+aW265Jb/73e+y8cYb58c//nHGjh2bgw46qHabN954I1OmTKld7tGjR/74xz+muro6ffv2zfnnn59f//rXXiUGAItryJDPXhm25pp129day6vEAGAxFHKpeadOnTJx4sT07t27TvvEiRMX+0nnu+++e3bfffcFrh83bly9toEDB+app55arHEAgPkYMiTZc898+sADmXjnnek3eLDLywFgMRUSvI866qgcffTReeWVV7LVVlsl+ewe73POOafOQ8wAgCagefOUtt02r8+c+dmD1IRuAFgshQTv008/PSuvvHLOP//8jBw5MknSpUuXjBo1Kscff3wRQwIAAEBZKiR4V1RUZNiwYRk2bFg+/PDDJMnKK69cxFAAAABQ1gp7j/c8AjcAAAArskKeag4AAAB8RvAGAACAAgneAAAAUKBGD941NTXZYYcd8tJLLzV21wAAANDkNHrwrqyszD/+8Y/G7hYAAACapEIuNT/44INz5ZVXFtE1AAAANCmFvE7s008/zW9+85vce++92WyzzdK2bds66y+44IIihgUAAICyU0jwfuaZZ7LpppsmSV588cU66yoqKooYEgAAAMpSIcH7gQceKKJbAAAAaHIKfZ3YpEmTcvfdd+ejjz5KkpRKpSKHAwAAgLJTSPB+5513ssMOO2TdddfNrrvumjfeeCNJcsQRR+QHP/hBEUMCAABAWSokeA8bNiyVlZWZMmVK2rRpU9u+33775a677ipiSAAAAChLhdzjfc899+Tuu+/OWmutVae9d+/e+fe//13EkAAAAFCWCjnjPXPmzDpnuud59913U1VVVcSQAAAAUJYKCd5f//rXc80119QuV1RUZO7cuTn33HOz3XbbFTEkAAAAlKVCLjU/99xzs8MOO+SJJ57IJ598klNOOSXPPvts3n333fzlL38pYkgAAAAoS4Wc8d54443z4osvZsCAAdlzzz0zc+bMDBkyJE899VR69uxZxJAAAABQlgo5450kq6yySn70ox8V1T0AAAA0CYUF7/feey9XXnllnn/++STJhhtumMMPPzwdOnQoakgAAAAoO4Vcaj5hwoR07949v/jFL/Lee+/lvffeyy9+8Yv06NEjEyZMKGJIAAAAKEuFnPE+7rjjst9+++XSSy9N8+bNkyRz5szJd7/73Rx33HH55z//WcSwAAAAUHYKOeM9adKk/OAHP6gN3UnSvHnzDB8+PJMmTSpiSAAAAChLhQTvTTfdtPbe7s97/vnn07dv3yKGBAAAgLLUaJea/+Mf/6j99/HHH58TTjghkyZNyv/8z/8kSR599NFccskl+dnPftZYQwIAAEDZa7Tg3a9fv1RUVKRUKtW2nXLKKfW2O/DAA7Pffvs11rAAAABQ1hoteE+ePLmxugIAAIDlRqMF727dujVWVwAAALDcKOR1YkkyderUPPzww5k2bVrmzp1bZ93xxx9f1LAAAABQVgoJ3uPGjcsxxxyTli1bpmPHjqmoqKhdV1FRIXgDAACwwigkeJ9++uk544wzMnLkyDRrVsgbywAAAKBJKCQVz5o1K/vvv7/QDQAAwAqvkGR8xBFH5A9/+EMRXQMAAECTUsil5mPGjMnuu++eu+66K3369EllZWWd9RdccEERwwIAAEDZKSx433333VlvvfWSpN7D1QAAAGBFUUjwPv/88/Ob3/wmhx12WBHdAwAAQJNRyD3eVVVV2XrrrYvoGgAAAJqUQoL3CSeckIsuuqiIrgEAAKBJKeRS88cffzz3339/7rjjjmy00Ub1Hq42fvz4IoYFAACAslNI8G7fvn2GDBlSRNcAAADQpBQSvK+66qoiugUAAIAmp5B7vAEAAIDPFHLGu0ePHgt9X/crr7xSxLAAAABQdgoJ3ieeeGKd5Zqamjz11FO56667cvLJJxcxJAAAAJSlQoL3CSecMN/2Sy65JE888UQRQwIAAEBZWqr3eA8ePDg333zz0hwSAAAAlqmlGrxvuummdOjQYWkOCQAAAMtUIZea9+/fv87D1UqlUt5888289dZb+eUvf1nEkAAAAFCWCgnee+21V53lZs2apVOnThk4cGDWX3/9IoYEAACAslRI8D7zzDOL6BYAAACanKV6jzcAAACsaBr1jHezZs3q3Ns9PxUVFfn0008bc1gAAAAoW40avG+55ZYFrnvkkUfyi1/8InPnzm3MIQEAAKCsNWrw3nPPPeu1vfDCCxkxYkRuv/32HHTQQTnrrLMac0gAAAAoa4Xd4z116tQcddRR6dOnTz799NNMnDgxV199dbp161bUkAAAAFB2Gj14f/DBBzn11FPTq1evPPvss7nvvvty++23Z+ONN27soQAAAKDsNeql5ueee27OOeecdO7cOb/73e/me+k5AAAArEgaNXiPGDEirVu3Tq9evXL11Vfn6quvnu9248ePb8xhAQAAoGw1avA+9NBDv/R1YgAAALAiadTgPW7cuMbsDgAAAJq8wp5qDgAAAAjeAAAAUCjBGwAAAAokeAMAAECByjp4jxo1KhUVFXW+1l9//QVuX1NTk7POOis9e/ZMq1at0rdv39x1111LccYAAABQV6M+1bwIG220Ue69997a5RYtFjzl0047Lddee22uuOKKrL/++rn77ruz9957569//Wv69++/NKYLAAAAdZR98G7RokU6d+68SNv+9re/zY9+9KPsuuuuSZLvfOc7uffee3P++efn2muvLXKaAAAAMF9lH7xfeumldOnSJa1atcqWW26ZMWPGZO21157vtrNnz06rVq3qtLVu3ToPP/zwQseYPXt2Zs+eXbs8ffr0JJ9dul5TU9PAPaDczTvGjjXlRF1SbtQk5UhdUm7U5IplcY5zRalUKhU4lwa58847M2PGjKy33np54403Mnr06Lz++ut55plnsvLKK9fb/sADD8zTTz+dW2+9NT179sx9992XPffcM3PmzKkTrL9o1KhRGT16dL3266+/Pm3atGnUfQIAAKDpmzVrVg488MB88MEHadeu3UK3Levg/UXvv/9+unXrlgsuuCBHHHFEvfVvvfVWjjrqqNx+++2pqKhIz549s+OOO+Y3v/lNPvroowX2O78z3l27ds3bb7/9pd9Amr6amppUV1dn0KBBqaysXNbTgSTqkvKjJilH6pJyoyZXLNOnT89qq622SMG77C81/7z27dtn3XXXzaRJk+a7vlOnTrn11lvz8ccf55133kmXLl0yYsSIrLPOOgvtt6qqKlVVVfXaKysr/cCsQBxvypG6pNyoScqRuqTcqMkVw+Ic47J+ndgXzZgxIy+//HLWWGONhW7XqlWrrLnmmvn0009z8803Z88991xKMwQAAIC6yjp4n3TSSXnooYfy6quv5q9//Wv23nvvNG/ePAcccECS5NBDD83IkSNrt3/ssccyfvz4vPLKK/nzn/+cXXbZJXPnzs0pp5yyrHYBAACAFVxZX2r+n//8JwcccEDeeeeddOrUKQMGDMijjz6aTp06JUmmTJmSZs3+398OPv7445x22ml55ZVXstJKK2XXXXfNb3/727Rv334Z7QEAAAArurIO3jfccMNC1z/44IN1lrfddts899xzBc4IAAAAFk9ZX2oOAAAATZ3gDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQGUdvEeNGpWKioo6X+uvv/5CPzN27Nist956ad26dbp27Zphw4bl448/XkozBgAAgLpaLOsJfJmNNtoo9957b+1yixYLnvL111+fESNG5De/+U222mqrvPjiiznssMNSUVGRCy64YGlMFwAAAOoo++DdokWLdO7ceZG2/etf/5qtt946Bx54YJKke/fuOeCAA/LYY48VOUUAAABYoLIP3i+99FK6dOmSVq1aZcstt8yYMWOy9tprz3fbrbbaKtdee20ef/zxbLHFFnnllVfypz/9KYcccshCx5g9e3Zmz55duzx9+vQkSU1NTWpqahpvZyhL846xY005UZeUGzVJOVKXlBs1uWJZnONcUSqVSgXOpUHuvPPOzJgxI+utt17eeOONjB49Oq+//nqeeeaZrLzyyvP9zC9+8YucdNJJKZVK+fTTT3Psscfm0ksvXeg4o0aNyujRo+u1X3/99WnTpk2j7AsAAADLj1mzZuXAAw/MBx98kHbt2i1027IO3l/0/vvvp1u3brngggtyxBFH1Fv/4IMPZv/9989PfvKTfO1rX8ukSZNywgkn5Kijjsrpp5++wH7nd8a7a9euefvtt7/0G0jTV1NTk+rq6gwaNCiVlZXLejqQRF1SftQk5UhdUm7U5Ipl+vTpWW211RYpeJf9peaf1759+6y77rqZNGnSfNeffvrpOeSQQ3LkkUcmSfr06ZOZM2fm6KOPzo9+9KM0azb/h7hXVVWlqqqqXntlZaUfmBWI4005UpeUGzVJOVKXlBs1uWJYnGNc1q8T+6IZM2bk5ZdfzhprrDHf9bNmzaoXrps3b54kaUIn9gEAAFiOlHXwPumkk/LQQw/l1VdfzV//+tfsvffead68eQ444IAkyaGHHpqRI0fWbr/HHnvk0ksvzQ033JDJkyenuro6p59+evbYY4/aAA4AAABLU1lfav6f//wnBxxwQN5555106tQpAwYMyKOPPppOnTolSaZMmVLnDPdpp52WioqKnHbaaXn99dfTqVOn7LHHHjn77LOX1S4AAACwgivr4H3DDTcsdP2DDz5YZ7lFixY588wzc+aZZxY4KwAAAFh0ZX2pOQAAADR1gjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAKVffAeNWpUKioq6nytv/76C9x+4MCB9bavqKjIbrvtthRnDQAAAJ9psawnsCg22mij3HvvvbXLLVoseNrjx4/PJ598Urv8zjvvpG/fvvnWt75V6BwBAABgfppE8G7RokU6d+68SNt26NChzvINN9yQNm3aCN4AAAAsE00ieL/00kvp0qVLWrVqlS233DJjxozJ2muvvUifvfLKK7P//vunbdu2C9xm9uzZmT17du3y9OnTkyQ1NTWpqalp2OQpe/OOsWNNOVGXlBs1STlSl5QbNbliWZzjXFEqlUoFzqXB7rzzzsyYMSPrrbde3njjjYwePTqvv/56nnnmmay88soL/ezjjz+er33ta3nssceyxRZbLHC7UaNGZfTo0fXar7/++rRp06bB+wAAAMDyZdasWTnwwAPzwQcfpF27dgvdtuyD9xe9//776datWy644IIcccQRC932mGOOySOPPJJ//OMfC91ufme8u3btmrfffvtLv4E0fTU1Namurs6gQYNSWVm5rKcDSdQl5UdNUo7UJeVGTa5Ypk+fntVWW22RgneTuNT889q3b5911103kyZNWuh2M2fOzA033JCzzjrrS/usqqpKVVVVvfbKyko/MCsQx5typC4pN2qScqQuKTdqcsWwOMe47F8n9kUzZszIyy+/nDXWWGOh2/3hD3/I7Nmzc/DBBy+lmQEAAEB9ZR+8TzrppDz00EN59dVX89e//jV77713mjdvngMOOCBJcuihh2bkyJH1PnfllVdmr732SseOHZf2lAEAAKBW2V9q/p///CcHHHBA3nnnnXTq1CkDBgzIo48+mk6dOiVJpkyZkmbN6v794IUXXsjDDz+ce+65Z1lMGQAAAGqVffC+4YYbFrr+wQcfrNe23nrrpYk9Mw4AAIDlVNlfag4AAABNmeANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgVos6wmUo1KplCSZPn36Mp4JS0NNTU1mzZqV6dOnp7KycllPB5KoS8qPmqQcqUvKjZpcsczLi/Py48II3vPx4YcfJkm6du26jGcCAABAOfvwww+zyiqrLHSbitKixPMVzNy5czN16tSsvPLKqaioWNbToWDTp09P165d89prr6Vdu3bLejqQRF1SftQk5UhdUm7U5IqlVCrlww8/TJcuXdKs2cLv4nbGez6aNWuWtdZaa1lPg6WsXbt2fkFSdtQl5UZNUo7UJeVGTa44vuxM9zwergYAAAAFErwBAACgQII3K7yqqqqceeaZqaqqWtZTgVrqknKjJilH6pJyoyZZEA9XAwAAgAI54w0AAAAFErwBAACgQII3AAAAFEjwZrl0ySWXpHv37mnVqlW+9rWv5fHHH1/gtjU1NTnrrLPSs2fPtGrVKn379s1dd91Vb7vXX389Bx98cDp27JjWrVunT58+eeKJJ4rcDZYjjV2Tc+bMyemnn54ePXqkdevW6dmzZ3784x/HYztYFBMmTMgee+yRLl26pKKiIrfeeuuXfubBBx/MpptumqqqqvTq1Svjxo2rt83i1Dl8URF1OWbMmHz1q1/NyiuvnNVXXz177bVXXnjhhWJ2gOVOUb8r5/nZz36WioqKnHjiiY02Z8qX4M1y5/e//32GDx+eM888M08++WT69u2bnXfeOdOmTZvv9qeddlp+9atf5aKLLspzzz2XY489NnvvvXeeeuqp2m3ee++9bL311qmsrMydd96Z5557Lueff35WXXXVpbVbNGFF1OQ555yTSy+9NBdffHGef/75nHPOOTn33HNz0UUXLa3dogmbOXNm+vbtm0suuWSRtp88eXJ22223bLfddpk4cWJOPPHEHHnkkbn77rtrt1ncOocvKqIuH3rooRx33HF59NFHU11dnZqamuy0006ZOXNmUbvBcqSImpznb3/7W371q19lk002aexpU65KsJzZYostSscdd1zt8pw5c0pdunQpjRkzZr7br7HGGqWLL764TtuQIUNKBx10UO3yqaeeWhowYEAxE2a5V0RN7rbbbqVvf/vbC90GFkWS0i233LLQbU455ZTSRhttVKdtv/32K+288861y4tb57AwjVWXXzRt2rRSktJDDz3UGNNkBdKYNfnhhx+WevfuXaquri5tu+22pRNOOKGRZ0s5csab5conn3ySv//979lxxx1r25o1a5Ydd9wxjzzyyHw/M3v27LRq1apOW+vWrfPwww/XLt92223ZfPPN861vfSurr756+vfvnyuuuKKYnWC5UlRNbrXVVrnvvvvy4osvJkmefvrpPPzwwxk8eHABe8GK7pFHHqlTw0my884719bwktQ5NNSX1eX8fPDBB0mSDh06FDo3VkyLWpPHHXdcdtttt3rbsnwTvFmuvP3225kzZ06+8pWv1Gn/yle+kjfffHO+n9l5551zwQUX5KWXXsrcuXNTXV2d8ePH54033qjd5pVXXsmll16a3r175+677853vvOdHH/88bn66qsL3R+avqJqcsSIEdl///2z/vrrp7KyMv3798+JJ56Ygw46qND9YcX05ptvzreGp0+fno8++miJ6hwa6svq8ovmzp2bE088MVtvvXU23njjpTVNViCLUpM33HBDnnzyyYwZM2ZZTJFlSPBmhXfhhRemd+/eWX/99dOyZct873vfy+GHH55mzf7fj8fcuXOz6aab5qc//Wn69++fo48+OkcddVQuu+yyZThzlleLUpM33nhjrrvuulx//fV58sknc/XVV+e8887zxyCABTjuuOPyzDPP5IYbbljWU2EF9dprr+WEE07IddddV+/KNpZ/gjfLldVWWy3NmzfPf//73zrt//3vf9O5c+f5fqZTp0659dZbM3PmzPz73//Ov/71r6y00kpZZ511ardZY401suGGG9b53AYbbJApU6Y0/k6wXCmqJk8++eTas959+vTJIYcckmHDhvkLOoXo3LnzfGu4Xbt2ad269RLVOTTUl9Xl533ve9/LHXfckQceeCBrrbXW0pwmK5Avq8m///3vmTZtWjbddNO0aNEiLVq0yEMPPZRf/OIXadGiRebMmbOMZs7SIHizXGnZsmU222yz3HfffbVtc+fOzX333Zctt9xyoZ9t1apV1lxzzXz66ae5+eabs+eee9au23rrreu9fuTFF19Mt27dGncHWO4UVZOzZs2qcwY8SZo3b565c+c27g5Aki233LJODSdJdXV1bQ03pM5hSX1ZXSZJqVTK9773vdxyyy25//7706NHj6U9TVYgX1aTO+ywQ/75z39m4sSJtV+bb755DjrooEycODHNmzdfFtNmaVnWT3eDxnbDDTeUqqqqSuPGjSs999xzpaOPPrrUvn370ptvvlkqlUqlQw45pDRixIja7R999NHSzTffXHr55ZdLEyZMKG2//falHj16lN57773abR5//PFSixYtSmeffXbppZdeKl133XWlNm3alK699tqlvXs0QUXU5NChQ0trrrlm6Y477ihNnjy5NH78+NJqq61WOuWUU5b27tEEffjhh6Wnnnqq9NRTT5WSlC644ILSU089Vfr3v/9dKpVKpREjRpQOOeSQ2u1feeWVUps2bUonn3xy6fnnny9dcsklpebNm5fuuuuu2m2+rM7hyxRRl9/5zndKq6yySunBBx8svfHGG7Vfs2bNWur7R9NTRE1+kaearzgEb5ZLF110UWnttdcutWzZsrTFFluUHn300dp12267bWno0KG1yw8++GBpgw02KFVVVZU6duxYOuSQQ0qvv/56vT5vv/320sYbb1yqqqoqrb/++qXLL798aewKy4nGrsnp06eXTjjhhNLaa69datWqVWmdddYp/ehHPyrNnj17ae0STdgDDzxQSlLva14dDh06tLTtttvW+0y/fv1KLVu2LK2zzjqlq666ql6/C6tz+DJF1OX8+ksy3/qFLyrqd+XnCd4rjopSqVRaeufXAQAAYMXiHm8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AK6jDDjssFRUVqaioSGVlZXr06JFTTjklH3/88bKeGgAsV1os6wkAAMvOLrvskquuuio1NTX5+9//nqFDh6aioiLnnHPOsp4aACw3nPEGgBVYVVVVOnfunK5du2avvfbKjjvumOrq6iRJ9+7dM3bs2Drb9+vXL6NGjapdrqioyK9//evsvffeadOmTXr37p3bbrttKe4BAJQ/wRsASJI888wz+etf/5qWLVsu1udGjx6dfffdN//4xz+y66675qCDDsq7775b0CwBoOkRvAFgBXbHHXdkpZVWSqtWrdKnT59MmzYtJ5988mL1cdhhh+WAAw5Ir1698tOf/jQzZszI448/XtCMAaDpcY83AKzAtttuu1x66aWZOXNmfv7zn6dFixb55je/uVh9bLLJJrX/btu2bdq1a5dp06Y19lQBoMlyxhsAVmBt27ZNr1690rdv3/zmN7/JY489liuvvDJJ0qxZs5RKpTrb19TU1OujsrKyznJFRUXmzp1b3KQBoIkRvAGAJJ8F7R/+8Ic57bTT8tFHH6VTp0554403atdPnz49kydPXoYzBICmSfAGAGp961vfSvPmzXPJJZdk++23z29/+9v8+c9/zj//+c8MHTo0zZs3X9ZTBIAmxz3eAECtFi1a5Hvf+17OPffcvPTSS5k8eXJ23333rLLKKvnxj3/sjDcALIGK0hdv3gIAAAAajUvNAQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAi+3BBx9MRUVFbrrppmU9lUXy3//+N/vss086duyYioqKjB07tkH9zdv/Bx98sFHmtyDdu3fPYYcdttTHXZF98XsOAI1B8AYoU+PGjUtFRUVatWqV119/vd76gQMHZuONN14GM2t6hg0blrvvvjsjR47Mb3/72+yyyy4L3LaioqL2q1mzZunSpUt22mknYXchRo0aVef7tqCvgQMHNsp4f/rTnzJq1KhG6auh3n///bRq1SoVFRV5/vnnl/V0CjHvd9G8rxYtWmTNNdfMYYcdNt/fTQDU12JZTwCAhZs9e3Z+9rOf5aKLLlrWU2my7r///uy555456aSTFmn7QYMG5dBDD02pVMrkyZPzy1/+Mttvv33++Mc/ZvDgwdlmm23y0UcfpWXLlgXPvK5lNe6XGTJkSHr16lW7PGPGjHznO9/J3nvvnSFDhtS2f+UrX2mU8f70pz/lkksuKYvw/Yc//CEVFRXp3LlzrrvuuvzkJz9Z1lMqzFlnnZUePXrk448/zqOPPppx48bl4YcfzjPPPJNWrVot6+kBlDXBG6DM9evXL1dccUVGjhyZLl26LOvpLFUzZ85M27ZtG9zPtGnT0r59+0Xeft11183BBx9cu7z33ntnk002ydixYzN48OA0a9ZsmQSNZTXul9lkk02yySab1C6//fbb+c53vpNNNtmkzvdxeXTttddm1113Tbdu3XL99dc3WvAulUr5+OOP07p160bprzEMHjw4m2++eZLkyCOPzGqrrZZzzjknt912W/bdd99lPDuA8uZSc4Ay98Mf/jBz5szJz372s4Vu9+qrr6aioiLjxo2rt66ioqLO2cF5lwa/+OKLOfjgg7PKKqukU6dOOf3001MqlfLaa69lzz33TLt27dK5c+ecf/758x1zzpw5+eEPf5jOnTunbdu2+cY3vpHXXnut3naPPfZYdtlll6yyyipp06ZNtt122/zlL3+ps828OT333HM58MADs+qqq2bAgAEL3edXXnkl3/rWt9KhQ4e0adMm//M//5M//vGPtevnXSJbKpVyySWX1F4qu7j69OmT1VZbLZMnT04y/3ut5136//e//z1bbbVVWrdunR49euSyyy6r19/s2bNz5plnplevXqmqqkrXrl1zyimnZPbs2Qudx8LGfe6557LddtulTZs2WXPNNXPuuecu8bjV1dUZMGBA2rdvn5VWWinrrbdefvjDHy7Gd2z+/vWvf2WfffZJhw4d0qpVq2y++ea57bbb6mxTU1OT0aNHp3fv3mnVqlU6duyYAQMGpLq6Okly2GGH5ZJLLklS97aAeebOnZuxY8dmo402SqtWrfKVr3wlxxxzTN57770645RKpfzkJz/JWmutlTZt2mS77bbLs88+u1j7M2XKlPz5z3/O/vvvn/333z+TJ0/OX//61/lue+2112aLLbZImzZtsuqqq2abbbbJPffcU7u+e/fu2X333XP33Xdn8803T+vWrfOrX/0qyZfX+TwXXXRRNtpoo9oxNt9881x//fW16z/88MOceOKJ6d69e6qqqrL66qtn0KBBefLJJxdrv+f5+te/niR5+eWXa9sGDhw431sKDjvssHTv3r12ed7vq/POOy+XX355evbsmaqqqnz1q1/N3/72tzqfffPNN3P44YdnrbXWSlVVVdZYY43sueeeefXVV5do3gDLgjPeAGWuR48eOfTQQ3PFFVdkxIgRjXrWe7/99ssGG2yQn/3sZ/njH/+Yn/zkJ+nQoUN+9atfZfvtt88555yT6667LieddFK++tWvZptttqnz+bPPPjsVFRU59dRTM23atIwdOzY77rhjJk6cWHum7v7778/gwYOz2Wab5cwzz0yzZs1y1VVXZfvtt8+f//znbLHFFnX6/Na3vpXevXvnpz/9aUql0gLn/t///jdbbbVVZs2aleOPPz4dO3bM1VdfnW984xu56aabsvfee2ebbbbJb3/72xxyyCG1l48viffeey/vvfdencupF7Tdrrvumn333TcHHHBAbrzxxnznO99Jy5Yt8+1vfzvJZ8HwG9/4Rh5++OEcffTR2WCDDfLPf/4zP//5z/Piiy/m1ltvXaL57bLLLhkyZEj23Xff3HTTTTn11FPTp0+fDB48eLHGffbZZ7P77rtnk002yVlnnZWqqqpMmjSp3h9KFtezzz6brbfeOmuuuWZGjBiRtm3b5sYbb8xee+2Vm2++OXvvvXeSz/4AM2bMmBx55JHZYostMn369DzxxBN58sknM2jQoBxzzDGZOnVqqqur89vf/rbeOMccc0zGjRuXww8/PMcff3wmT56ciy++OE899VT+8pe/pLKyMklyxhln5Cc/+Ul23XXX7LrrrnnyySez00475ZNPPlnkffrd736Xtm3bZvfdd0/r1q3Ts2fPXHfdddlqq63qbDd69OiMGjUqW221Vc4666y0bNkyjz32WO6///7stNNOtdu98MILOeCAA3LMMcfkqKOOynrrrbdIdZ4kV1xxRY4//vjss88+OeGEE/Lxxx/nH//4Rx577LEceOCBSZJjjz02N910U773ve9lww03zDvvvJOHH344zz//fDbddNPFO6BJbfBdddVVF/uz81x//fX58MMPc8wxx6SioiLnnntuhgwZkldeeaX2WH3zm9/Ms88+m+9///vp3r17pk2blurq6kyZMqVOmAcoayUAytJVV11VSlL629/+Vnr55ZdLLVq0KB1//PG167fddtvSRhttVLs8efLkUpLSVVddVa+vJKUzzzyzdvnMM88sJSkdffTRtW2ffvppaa211ipVVFSUfvazn9W2v/fee6XWrVuXhg4dWtv2wAMPlJKU1lxzzdL06dNr22+88cZSktKFF15YKpVKpblz55Z69+5d2nnnnUtz586t3W7WrFmlHj16lAYNGlRvTgcccMAifX9OPPHEUpLSn//859q2Dz/8sNSjR49S9+7dS3PmzKmz/8cdd9wi9ZukdMQRR5Teeuut0rRp00qPPfZYaYcddiglKZ1//vl19v+BBx6o/dy2225bZ5tSqVSaPXt2qV+/fqXVV1+99Mknn5RKpVLpt7/9balZs2Z15l0qlUqXXXZZKUnpL3/5S21bt27d5vt9n9+411xzTZ1xO3fuXPrmN79Z27ao4/785z8vJSm99dZbi/T9mp+33nqrXs3tsMMOpT59+pQ+/vjj2ra5c+eWttpqq1Lv3r1r2/r27VvabbfdFtr/cccdV5rff2H+/Oc/l5KUrrvuujrtd911V532adOmlVq2bFnabbfd6tTlD3/4w1KSOt/zhenTp0/poIMOqvP51VZbrVRTU1Pb9tJLL5WaNWtW2nvvvevUZKlUqjN2t27dSklKd911V51tFrXO99xzzzq/D+ZnlVVWWeSfg8+b97vo3nvvLb311lul1157rXTTTTeVOnXqVKqqqiq99tprtdtuu+22pW233bZeH0OHDi1169atdnne76uOHTuW3n333dr2//u//yslKd1+++2lUumz3z9JSv/7v/+72PMGKCcuNQdoAtZZZ50ccsghufzyy/PGG280Wr9HHnlk7b+bN2+ezTffPKVSKUcccURte/v27bPeeuvllVdeqff5Qw89NCuvvHLt8j777JM11lgjf/rTn5IkEydOzEsvvZQDDzww77zzTt5+++28/fbbmTlzZnbYYYdMmDAhc+fOrdPnscceu0hz/9Of/pQtttiizuXoK620Uo4++ui8+uqree655xbtmzAfV155ZTp16pTVV189X/va1/KXv/wlw4cPz4knnrjQz7Vo0SLHHHNM7XLLli1zzDHHZNq0afn73/+e5LOHcW2wwQZZf/31a78fb7/9drbffvskyQMPPLDY811ppZXq3EvdsmXLbLHFFnWO2aKOO+9e+P/7v/+rd2yW1Lvvvpv7778/++67bz788MPasd95553svPPOeemll2qfjt2+ffs8++yzeemllxZ7nD/84Q9ZZZVVMmjQoDr7uNlmm2WllVaq3cd77703n3zySb7//e/XuUz9y47v5/3jH//IP//5zxxwwAG1bQcccEDefvvt3H333bVtt956a+bOnZszzjgjzZrV/W/XF2976NGjR3beeec6bYta5+3bt89//vOfepdpf1779u3z2GOPZerUqYu8n5+34447plOnTunatWv22WeftG3bNrfddlvWWmutJeov+eyqm8+fMZ93+fq82m3dunVatmyZBx98sN7tAgBNieAN0EScdtpp+fTTT7/0Xu/Fsfbaa9dZXmWVVdKqVausttpq9drn95/e3r1711muqKhIr169ai9BnReehg4dmk6dOtX5+vWvf53Zs2fngw8+qNNHjx49Fmnu//73v7PeeuvVa99ggw1q1y+pPffcM9XV1bn33nvz2GOP5e233875559fLzh9UZcuXeo9DG7ddddNkjrfk2effbbe92PedtOmTVvs+a611lr1Qtyqq65a55gt6rj77bdftt566xx55JH5yle+kv333z833nhjg0L4pEmTUiqVcvrpp9cb/8wzz6wz/llnnZX3338/6667bvr06ZOTTz45//jHPxZpnJdeeikffPBBVl999XrjzJgxo3aMebXxxfrt1KnTIl82fe2116Zt27ZZZ511MmnSpEyaNCmtWrVK9+7dc91119Vu9/LLL6dZs2bZcMMNv7TP+dX+otb5qaeempVWWilbbLFFevfuneOOO67e7QHnnntunnnmmXTt2jVbbLFFRo0aNd8/qC3IJZdckurq6tx0003Zdddd8/bbb6eqqmqRPz8/X/wdNO/7P692q6qqcs455+TOO+/MV77ylWyzzTY599xz8+abbzZoXIClzT3eAE3EOuusk4MPPjiXX355RowYUW/9gh4aNmfOnAX22bx580VqS7LQ+60XZF5Y+9///d/069dvvtustNJKdZbL4SnOa621VnbcccdC+p47d2769OmTCy64YL7ru3btuth9LsoxW9RxW7dunQkTJuSBBx7IH//4x9x11135/e9/n+233z733HPPAsdamHl1cNJJJ9U7ozvPvPvnt9lmm7z88sv5v//7v9xzzz359a9/nZ///Oe57LLL6lyhsaBxVl999TrB9/M6deq02HOfn1KplN/97neZOXPmfAP1tGnTMmPGjHq1/WUaUvsbbLBBXnjhhdxxxx256667cvPNN+eXv/xlzjjjjIwePTpJsu++++brX/96brnlltxzzz353//935xzzjkZP3587bMAFmaLLbaofar5XnvtlQEDBuTAAw/MCy+8ULuv8x5m+EUL+j20KLV74oknZo899sitt96au+++O6effnrGjBmT+++/P/379//SeQOUA8EboAk57bTTcu211+acc86pt27emaL333+/TntDzvx+mS9eDlwqlTJp0qTaV0v17NkzSdKuXbtGD7LdunXLCy+8UK/9X//6V+36pW3q1Kn1XoH24osvJkntQ6B69uyZp59+OjvssMMSPWF9SS3OuM2aNcsOO+yQHXbYIRdccEF++tOf5kc/+lEeeOCBJTqO66yzTpKksrJykT7foUOHHH744Tn88MMzY8aMbLPNNhk1alRt8F7Q/Hv27Jl77703W2+99UJD7LzaeOmll2rnliRvvfXWIl3O/NBDD+U///lPzjrrrNozz/O89957Ofroo3Prrbfm4IMPTs+ePTN37tw899xzC/zj08IsTp23bds2++23X/bbb7988sknGTJkSM4+++yMHDmy9jV0a6yxRr773e/mu9/9bqZNm5ZNN900Z5999iIF789r3rx5xowZk+222y4XX3xx7R8DV1111fmeRW/o76GePXvmBz/4QX7wgx/kpZdeSr9+/XL++efn2muvbVC/AEuLS80BmpCePXvm4IMPzq9+9at6l1q2a9cuq622WiZMmFCn/Ze//GVh87nmmmvy4Ycf1i7fdNNNeeONN2r/E7/ZZpulZ8+eOe+88zJjxox6n3/rrbeWeOxdd901jz/+eB555JHatpkzZ+byyy9P9+7dF+nS3sb26aef1r4CKkk++eST/OpXv0qnTp2y2WabJfnsrOPrr7+eK664ot7nP/roo8ycObOQuS3quO+++2699fMC45e97mxBVl999QwcODC/+tWv5vuMgs/XwTvvvFNn3UorrZRevXrVGXveHza++EemfffdN3PmzMmPf/zjemN8+umntdvvuOOOqayszEUXXVTnzOrYsWMXaX/mXWZ+8sknZ5999qnzddRRR6V37961Z9332muvNGvWLGeddVa9y/UX5SqSRa3zL37fWrZsmQ033DClUik1NTWZM2dOvds6Vl999XTp0mWJj+vAgQOzxRZbZOzYsfn444+TfPY76l//+ledY/r0008v8VPxZ82aVdv3PD179szKK6+8xPMGWBac8QZoYn70ox/lt7/9bV544YVstNFGddYdeeSR+dnPfpYjjzwym2++eSZMmFB7xrUIHTp0yIABA3L44Yfnv//9b8aOHZtevXrlqKOOSvLZmdNf//rXGTx4cDbaaKMcfvjhWXPNNfP666/ngQceSLt27XL77bcv0dgjRozI7373uwwePDjHH398OnTokKuvvjqTJ0/OzTff/KX3YxehS5cuOeecc/Lqq69m3XXXze9///tMnDgxl19+ee2rkQ455JDceOONOfbYY/PAAw9k6623zpw5c/Kvf/0rN954Y+17nBvboo571llnZcKECdltt93SrVu3TJs2Lb/85S+z1lprfel71RfmkksuyYABA9KnT58cddRRWWeddfLf//43jzzySP7zn//k6aefTpJsuOGGGThwYDbbbLN06NAhTzzxRO0rsOaZ90eM448/PjvvvHOaN2+e/fffP9tuu22OOeaYjBkzJhMnTsxOO+2UysrKvPTSS/nDH/6QCy+8MPvss086deqUk046KWPGjMnuu++eXXfdNU899VTuvPPOes83+KLZs2fn5ptvzqBBg2rPIn/RN77xjVx44YWZNm1aevXqlR/96Ef58Y9/nK9//esZMmRIqqqq8re//S1dunTJmDFjFjreotb5TjvtlM6dO2frrbfOV77ylTz//PO5+OKLs9tuu2XllVfO+++/n7XWWiv77LNP+vbtm5VWWin33ntv/va3v+X8889f5OP4RSeffHK+9a1vZdy4cTn22GPz7W9/OxdccEF23nnnHHHEEZk2bVouu+yybLTRRpk+ffpi9//iiy9mhx12yL777psNN9wwLVq0yC233JL//ve/2X///Zd43gBL3TJ6mjoAX+LzrxP7oqFDh5aS1Ht90KxZs0pHHHFEaZVVVimtvPLKpX333bc0bdq0Bb5O7IuvjBo6dGipbdu29cb74qvL5r3W6ne/+11p5MiRpdVXX73UunXr0m677Vb697//Xe/zTz31VGnIkCGljh07lqqqqkrdunUr7bvvvqX77rvvS+e0MC+//HJpn332KbVv377UqlWr0hZbbFG644476m2XxXyd2Jdtu6DXem200UalJ554orTllluWWrVqVerWrVvp4osvrvf5Tz75pHTOOeeUNtpoo1JVVVVp1VVXLW222Wal0aNHlz744IPa7Rb1dWLze43UF1/ftKjj3nfffaU999yz1KVLl1LLli1LXbp0KR1wwAGlF198caHfk8+b3+vESqXPjtehhx5a6ty5c6mysrK05pprlnbffffSTTfdVLvNT37yk9IWW2xRat++fal169al9ddfv3T22WfXvo6tVPrs1Xff//73S506dSpVVFTUe7XY5ZdfXtpss81KrVu3Lq288sqlPn36lE455ZTS1KlTa7eZM2dOafTo0aU11lij1Lp169LAgQNLzzzzTL3v+RfdfPPNpSSlK6+8coHbPPjgg3Veq1cqlUq/+c1vSv3796/9vm+77bal6urq2vXdunVb4GvUFqXOf/WrX5W22Wab2p+xnj17lk4++eTa4zp79uzSySefXOrbt29p5ZVXLrVt27bUt2/f0i9/+csF7sc8C/tdNGfOnFLPnj1LPXv2LH366aelUqlUuvbaa0vrrLNOqWXLlqV+/fqV7r777gW+Tmx+rwn7fO28/fbbpeOOO660/vrrl9q2bVtaZZVVSl/72tdKN95445fOG6CcVJRKS/C0HACgjoEDB+btt9/OM888s6ynAgCUGfd4AwAAQIEEbwAAACiQ4A0AAAAFco83AAAAFMgZbwAAACiQ4A0AAAAFarGsJ1CO5s6dm6lTp2bllVdORUXFsp4OAAAAZaZUKuXDDz9Mly5d0qzZws9pC97zMXXq1HTt2nVZTwMAAIAy99prr2WttdZa6DaC93ysvPLKST77BrZr124Zz4ai1dTU5J577slOO+2UysrKZT0dSKIuKT9qknKkLik3anLFMn369HTt2rU2Py6M4D0f8y4vb9euneC9AqipqUmbNm3Srl07vyApG+qScqMmKUfqknKjJldMi3J7soerAQAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAAChQ2QXvCRMmZI899kiXLl1SUVGRW2+9tXZdTU1NTj311PTp0ydt27ZNly5dcuihh2bq1Km127z66qs54ogj0qNHj7Ru3To9e/bMmWeemU8++WQZ7A0AAAArurIL3jNnzkzfvn1zySWX1Fs3a9asPPnkkzn99NPz5JNPZvz48XnhhRfyjW98o3abf/3rX5k7d25+9atf5dlnn83Pf/7zXHbZZfnhD3+4NHcDAAAAkiQtlvUEvmjw4MEZPHjwfNetssoqqa6urtN28cUXZ4sttsiUKVOy9tprZ5dddskuu+xSu36dddbJCy+8kEsvvTTnnXdeoXMHAACALyq7M96L64MPPkhFRUXat2+/0G06dOiw9CYFAAAA/7+yO+O9OD7++OOceuqpOeCAA9KuXbv5bjNp0qRcdNFFCz3bPXv27MyePbt2efr06Uk+u6e8pqamcSdN2Zl3jB1ryom6pNyoScqRuqTcqMkVy+Ic54pSqVQqcC4NUlFRkVtuuSV77bVXvXU1NTX55je/mf/85z958MEH5xu8X3/99Wy77bYZOHBgfv3rXy9wnFGjRmX06NH12q+//vq0adOmQfsAAADA8mfWrFk58MAD88EHHyzwRPA8TTJ419TUZN99980rr7yS+++/Px07dqz32alTp2bgwIH5n//5n4wbNy7Nmi34qvr5nfHu2rVr3n777S/9BtL01dTUpLq6OoMGDUplZeWyng4kUZeUHzVJOVKXlBs1uWKZPn16VltttUUK3k3uUvN5ofull17KAw88MN/Q/frrr2e77bbLZpttlquuumqhoTtJqqqqUlVVVa+9srLSD8wKxPGmHKlLyo2apBypS8qNmlwxLM4xLrvgPWPGjEyaNKl2efLkyZk4cWI6dOiQNdZYI/vss0+efPLJ3HHHHZkzZ07efPPNJEmHDh3SsmXLvP766xk4cGC6deuW8847L2+99VZtX507d17q+wMAAMCKreyC9xNPPJHtttuudnn48OFJkqFDh2bUqFG57bbbkiT9+vWr87kHHnggAwcOTHV1dSZNmpRJkyZlrbXWqrNNGV9VDwAAwHKq7IL3wIEDFxqQvyw8H3bYYTnssMMaeVYAAACwZJr8e7wBAACgnAneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKFDZBe8JEyZkjz32SJcuXVJRUZFbb721dl1NTU1OPfXU9OnTJ23btk2XLl1y6KGHZurUqXX6ePfdd3PQQQelXbt2ad++fY444ojMmDFjKe8JAAAAlGHwnjlzZvr27ZtLLrmk3rpZs2blySefzOmnn54nn3wy48ePzwsvvJBvfOMbdbY76KCD8uyzz6a6ujp33HFHJkyYkKOPPnpp7QIAAADUarGsJ/BFgwcPzuDBg+e7bpVVVkl1dXWdtosvvjhbbLFFpkyZkrXXXjvPP/987rrrrvztb3/L5ptvniS56KKLsuuuu+a8885Lly5dCt8HAAAAmKfszngvrg8++CAVFRVp3759kuSRRx5J+/bta0N3kuy4445p1qxZHnvssWU0SwAAAFZUZXfGe3F8/PHHOfXUU3PAAQekXbt2SZI333wzq6++ep3tWrRokQ4dOuTNN9+cbz+zZ8/O7Nmza5enT5+e5LN7ymtqagqaPeVi3jF2rCkn6pJyoyYpR+qScqMmVyyLc5ybbPCuqanJvvvum1KplEsvvbRBfY0ZMyajR4+u137PPfekTZs2DeqbpuOLtzFAOVCXlBs1STlSl5QbNblimDVr1iJv2ySD97zQ/e9//zv3339/7dnuJOncuXOmTZtWZ/tPP/007777bjp37jzf/kaOHJnhw4fXLk+fPj1du3bNTjvtVKdvlk81NTWprq7OoEGDUllZuaynA0nUJeVHTVKO1CXlRk2uWOZdKb0omlzwnhe6X3rppTzwwAPp2LFjnfVbbrll3n///fz973/PZpttliS5//77M3fu3Hzta1+bb59VVVWpqqqq115ZWekHZgXieFOO1CXlRk1SjtQl5UZNrhgW5xiXXfCeMWNGJk2aVLs8efLkTJw4MR06dMgaa6yRffbZJ08++WTuuOOOzJkzp/a+7Q4dOqRly5bZYIMNsssuu+Soo47KZZddlpqamnzve9/L/vvv74nmAAAALHVlF7yfeOKJbLfddrXL8y4BHzp0aEaNGpXbbrstSdKvX786n3vggQcycODAJMl1112X733ve9lhhx3SrFmzfPOb38wvfvGLpTJ/AAAA+LyyC94DBw5MqVRa4PqFrZunQ4cOuf766xtzWgAAALBEmvx7vAEAAKCcCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAokOANAAAABRK8AQAAoECCNwAAABRI8AYAAIACCd4AAABQIMEbAAAACiR4AwAAQIEEbwAAACiQ4A0AAAAFErwBAACgQII3AAAAFEjwBgAAgAIJ3gAAAFAgwRsAAAAKJHgDAABAgQRvAAAAKJDgDQAAAAUSvAEAAKBAgjcAAAAUSPAGAACAAgneAAAAUCDBGwAAAAokeAMAAECBBG8AAAAoUIOD91133ZWHH364dvmSSy5Jv379cuCBB+a9995raPcAAADQpDU4eJ988smZPn16kuSf//xnfvCDH2TXXXfN5MmTM3z48AZPEAAAAJqyFg3tYPLkydlwww2TJDfffHN23333/PSnP82TTz6ZXXfdtcETBAAAgKaswWe8W7ZsmVmzZiVJ7r333uy0005Jkg4dOtSeCQcAAIAVVYPPeA8YMCDDhw/P1ltvnccffzy///3vkyQvvvhi1lprrQZPEAAAAJqyBp/xvvjii9OiRYvcdNNNufTSS7PmmmsmSe68887ssssuDZ4gAAAANGUNPuO99tpr54477qjX/vOf/7yhXQMAAECT1yjv8X755Zdz2mmn5YADDsi0adOSfHbG+9lnn22M7gEAAKDJanDwfuihh9KnT5889thjGT9+fGbMmJEkefrpp3PmmWc2eIIAAADQlDU4eI8YMSI/+clPUl1dnZYtW9a2b7/99nn00Ucb2j0AAAA0aQ0O3v/85z+z995712tfffXV8/bbbze0ewAAAGjSGhy827dvnzfeeKNe+1NPPVX7hHMAAABYUTU4eO+///459dRT8+abb6aioiJz587NX/7yl5x00kk59NBDG2OOAAAA0GQ1OHj/9Kc/zfrrr5+uXbtmxowZ2XDDDbPNNttkq622ymmnndYYcwQAAIAmq8Hv8W7ZsmWuuOKKnH766XnmmWcyY8aM9O/fP717926M+QEAAECT1uDgPc/aa6+dtddeu7G6AwAAgOVCg4P3nDlzMm7cuNx3332ZNm1a5s6dW2f9/fff39AhAAAAoMlqcPA+4YQTMm7cuOy2227ZeOONU1FR0RjzAgAAgOVCg4P3DTfckBtvvDG77rprY8wHAAAAlisNfqp5y5Yt06tXr8aYCwAAACx3Ghy8f/CDH+TCCy9MqVRqjPkAAADAcqXBl5o//PDDeeCBB3LnnXdmo402SmVlZZ3148ePb+gQAAAA0GQ1OHi3b98+e++9d2PMBQAAAJY7DQ7eV111VWPMAwAAAJZLDb7HuzFNmDAhe+yxR7p06ZKKiorceuutddaPHz8+O+20Uzp27JiKiopMnDixXh9vvvlmDjnkkHTu3Dlt27bNpptumptvvnnp7AAAAAB8wRKd8d50001z3333ZdVVV03//v0X+u7uJ598cpH7nTlzZvr27Ztvf/vbGTJkyHzXDxgwIPvuu2+OOuqo+fZx6KGH5v33389tt92W1VZbLddff3323XffPPHEE+nfv/8izwUAAAAawxIF7z333DNVVVVJkr322qvRJjN48OAMHjx4gesPOeSQJMmrr766wG3++te/5tJLL80WW2yRJDnttNPy85//PH//+98FbwAAAJa6JQreZ5555nz/XQ622mqr/P73v89uu+2W9u3b58Ybb8zHH3+cgQMHLuupAQAAsAJq8MPVys2NN96Y/fbbLx07dkyLFi3Spk2b3HLLLenVq9cCPzN79uzMnj27dnn69OlJkpqamtTU1BQ+Z5atecfYsaacqEvKjZqkHKlLyo2aXLEsznFeouC96qqrLvS+7s979913l2SIJXb66afn/fffz7333pvVVlstt956a/bdd9/8+c9/Tp8+feb7mTFjxmT06NH12u+55560adOm6ClTJqqrq5f1FKAedUm5UZOUI3VJuVGTK4ZZs2Yt8rYVpVKptLgDXH311Yu87dChQxe3+yRJRUVFbrnllvneQ/7qq6+mR48eeeqpp9KvX7/a9pdffjm9evXKM888k4022qi2fccdd0yvXr1y2WWXzXes+Z3x7tq1a95+++20a9duieZP01FTU5Pq6uoMGjQolZWVy3o6kERdUn7UJOVIXVJu1OSKZfr06VlttdXywQcffGluXKIz3ksapos27y8OzZrVfUta8+bNM3fu3AV+rqqqqvZhcZ9XWVnpB2YF4nhTjtQl5UZNUo7UJeVGTa4YFucYN8o93i+//HKuuuqqvPzyy7nwwguz+uqr584778zaa69d58zzl5kxY0YmTZpUuzx58uRMnDgxHTp0yNprr5133303U6ZMydSpU5MkL7zwQpKkc+fO6dy5c9Zff/306tUrxxxzTM4777x07Ngxt956a6qrq3PHHXc0xq4CAADAYmn25Zss3EMPPZQ+ffrksccey/jx4zNjxowkydNPP73YTzyf967tea/9Gj58ePr3758zzjgjSXLbbbelf//+2W233ZIk+++/f/r37197CXllZWX+9Kc/pVOnTtljjz2yySab5JprrsnVV1+dXXfdtaG7CgAAAIutwWe8R4wYkZ/85CcZPnx4Vl555dr27bffPhdffPFi9TVw4MAs7Jbzww47LIcddthC++jdu3duvvnmxRoXAAAAitLgM97//Oc/s/fee9drX3311fP22283tHsAAABo0hocvNu3b5833nijXvtTTz2VNddcs6HdAwAAQJPW4OC9//7759RTT82bb76ZioqKzJ07N3/5y19y0kkn5dBDD22MOQIAAECT1eDg/dOf/jTrr79+unbtmhkzZmTDDTfMNttsk6222iqnnXZaY8wRAAAAmqwGP1ytZcuWueKKK3L66afnmWeeyYwZM9K/f//07t27MeYHAAAATVqjvMc7SdZee+107do1SVJRUdFY3QIAAECT1uBLzZPkyiuvzMYbb5xWrVqlVatW2XjjjfPrX/+6MboGAACAJq3BZ7zPOOOMXHDBBfn+97+fLbfcMknyyCOPZNiwYZkyZUrOOuusBk8SAAAAmqoGB+9LL700V1xxRQ444IDatm984xvZZJNN8v3vf1/wBgAAYIXW4EvNa2pqsvnmm9dr32yzzfLpp582tHsAAABo0hocvA855JBceuml9dovv/zyHHTQQQ3tHgAAAJq0Rnmq+ZVXXpl77rkn//M//5MkeeyxxzJlypQceuihGT58eO12F1xwQWMMBwAAAE1Gg4P3M888k0033TRJ8vLLLydJVltttay22mp55plnarfzijEAAABWRA0O3g888EBjzAMAAACWS43yHm8AAABg/pbojPeQIUMybty4tGvXLkOGDFnotuPHj1+iiQEAAMDyYImC9yqrrFJ7z3a7du3cvw0AAAALsETB+6qrrqr997hx4xprLgAAALDcWeJ7vOfOnZtzzjknW2+9db761a9mxIgR+eijjxpzbgAAANDkLXHwPvvss/PDH/4wK620UtZcc81ceOGFOe644xpzbgAAANDkLXHwvuaaa/LLX/4yd999d2699dbcfvvtue666zJ37tzGnB8AAAA0aUscvKdMmZJdd921dnnHHXdMRUVFpk6d2igTAwAAgOXBEgfvTz/9NK1atarTVllZmZqamgZPCgAAAJYXS/RU8yQplUo57LDDUlVVVdv28ccf59hjj03btm1r27zHGwAAgBXZEgfvoUOH1ms7+OCDGzQZAAAAWN4scfD+/Lu8AQAAgPlb4nu8AQAAgC8neAMAAECBBG8AAAAokOANACzUnLlz8tC/H8qE9ybkoX8/lDlz5yzrKQFAk7JEwXvTTTfNe++9lyQ566yzMmvWrEadFABQHsY/Pz7dL+yeQdcNygX/viCDrhuU7hd2z/jnvS4UABbVEgXv559/PjNnzkySjB49OjNmzGjUSQEAy97458dnnxv3yX+m/6dO++vTX88+N+4jfAPAIlqi14n169cvhx9+eAYMGJBSqZTzzjsvK6200ny3PeOMMxo0QQBg6Zszd05OuOuElFKqt66UUipSkRPvOjF7rrdnmjdrvgxmCABNxxIF73HjxuXMM8/MHXfckYqKitx5551p0aJ+VxUVFYI3ADRBf57y53pnuj+vlFJem/5a/jzlzxnYfeDSmxgANEFLFLzXW2+93HDDDUmSZs2a5b777svqq6/eqBMDAJadNz58o1G3A4AV2RIF78+bO3duY8wDACgja6y8RqNuBwArsgYH7yR5+eWXM3bs2Dz//PNJkg033DAnnHBCevbs2RjdAwBL2dfX/nrWardWXp/++nzv865IRdZqt1a+vvbXl8HsAKBpafB7vO++++5suOGGefzxx7PJJptkk002yWOPPZaNNtoo1dXVjTFHAGApa96seS7c5cIkn4Xsz5u3PHaXsR6sBgCLoMFnvEeMGJFhw4blZz/7Wb32U089NYMGDWroEADAMjBkgyG5ad+bcsJdJ9R50Npa7dbK2F3GZsgGQ5bh7ACg6Whw8H7++edz44031mv/9re/nbFjxza0ewBgGRqywZDsud6eeeCVB3Lnw3dm8IDB2W6d7ZzpBoDF0OBLzTt16pSJEyfWa584caInnQPAcqB5s+bZttu22WbVbbJtt22FbgBYTA0+433UUUfl6KOPziuvvJKtttoqSfKXv/wl55xzToYPH97gCQIAAEBT1uDgffrpp2fllVfO+eefn5EjRyZJunTpklGjRuX4449v8AQBAACgKWtw8K6oqMiwYcMybNiwfPjhh0mSlVdeucETAwAAgOVBo7zHex6BGwAAAOpq8MPVAAAAgAUTvAEAAKBAgjcAAAAUqEHBu6amJjvssENeeumlxpoPAAAALFcaFLwrKyvzj3/8o7HmAgAAAMudBl9qfvDBB+fKK69sjLkAAADAcqfBrxP79NNP85vf/Cb33ntvNttss7Rt27bO+gsuuKChQwAAAECT1eDg/cwzz2TTTTdNkrz44ot11lVUVDS0ewAAAGjSGhy8H3jggcaYBwAAACyXGu11YpMmTcrdd9+djz76KElSKpUaq2sAAABoshocvN95553ssMMOWXfddbPrrrvmjTfeSJIcccQR+cEPftDgCQIAAEBT1uDgPWzYsFRWVmbKlClp06ZNbft+++2Xu+66q6HdAwAAQJPW4Hu877nnntx9991Za6216rT37t07//73vxvaPQAAADRpDT7jPXPmzDpnuud59913U1VV1dDuAQAAoElrcPD++te/nmuuuaZ2uaKiInPnzs25556b7bbbrqHdAwAAQJPW4EvNzz333Oywww554okn8sknn+SUU07Js88+m3fffTd/+ctfGmOOAAAA0GQ1+Iz3xhtvnBdffDEDBgzInnvumZkzZ2bIkCF56qmn0rNnz8aYIwAAADRZDT7jnSSrrLJKfvSjHzVGVwAAALBcaZTg/d577+XKK6/M888/nyTZcMMNc/jhh6dDhw6N0T0AAAA0WQ2+1HzChAnp3r17fvGLX+S9997Le++9l1/84hfp0aNHJkyY0BhzBAAAgCarwWe8jzvuuOy333659NJL07x58yTJnDlz8t3vfjfHHXdc/vnPfzZ4kgAAANBUNfiM96RJk/KDH/ygNnQnSfPmzTN8+PBMmjSpod0DAABAk9bg4L3pppvW3tv9ec8//3z69u3b0O4BAACgSVuiS83/8Y9/1P77+OOPzwknnJBJkyblf/7nf5Ikjz76aC655JL87Gc/a5xZAgAAQBO1RGe8+/Xrl/79+6dfv3454IAD8tprr+WUU07JNttsk2222SannHJK/v3vf+fAAw9crH4nTJiQPfbYI126dElFRUVuvfXWOuvHjx+fnXbaKR07dkxFRUUmTpw4334eeeSRbL/99mnbtm3atWuXbbbZJh999NGS7CoAAAA0yBKd8Z48eXJjzyNJMnPmzPTt2zff/va3M2TIkPmuHzBgQPbdd98cddRR8+3jkUceyS677JKRI0fmoosuSosWLfL000+nWbMGX1UPAAAAi22Jgne3bt0aex5JksGDB2fw4MELXH/IIYckSV599dUFbjNs2LAcf/zxGTFiRG3beuut12hzBAAAgMXR4NeJJcnUqVPz8MMPZ9q0aZk7d26ddccff3xjDLFIpk2blsceeywHHXRQttpqq7z88stZf/31c/bZZ2fAgAEL/Nzs2bMze/bs2uXp06cnSWpqalJTU1P4vFm25h1jx5pyoi4pN2qScqQuKTdqcsWyOMe5wcF73LhxOeaYY9KyZcvae6/nqaioWKrB+5VXXkmSjBo1Kuedd1769euXa665JjvssEOeeeaZ9O7de76fGzNmTEaPHl2v/Z577kmbNm0KnTPlo7q6ellPAepRl5QbNUk5UpeUGzW5Ypg1a9Yib9vg4H366afnjDPOyMiRI5f5fdTzzrYfc8wxOfzww5Mk/fv3z3333Zff/OY3GTNmzHw/N3LkyAwfPrx2efr06enatWt22mmntGvXrviJs0zV1NSkuro6gwYNSmVl5bKeDiRRl5QfNUk5UpeUGzW5Ypl3pfSiaHDwnjVrVvbff/9lHrqTZI011kiSbLjhhnXaN9hgg0yZMmWBn6uqqkpVVVW99srKSj8wKxDHm3KkLik3apJypC4pN2pyxbA4x7jBafmII47IH/7wh4Z20yi6d++eLl265IUXXqjT/uKLLxb2QDgAAABYmAaf8R4zZkx233333HXXXenTp0+91H/BBRcscl8zZszIpEmTapcnT56ciRMnpkOHDll77bXz7rvvZsqUKZk6dWqS1Abszp07p3PnzqmoqMjJJ5+cM888M3379k2/fv1y9dVX51//+lduuummhu4qAAAALLZGCd5333137Su7vvhwtcXxxBNPZLvttqtdnnff9dCh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xRfHRRddFPfee28bTk5ntTWZfPrpp2Pu3Lnx5JNPxrJly+Kxxx6L2267zQ+DAP7C+PHj46OPPop58+a19Sh0UV9//XVMnDgx5s6du9FvttH5Kd50KjvvvHOUlpbGd9991+z8d999F7169drkNbvssks8//zzsXbt2vjyyy/jk08+iW233Tb69+9fXLP77rvHfvvt1+y6fffdN7766quW3wSdSq5MTp48ufjUe/DgwTF27Ni4/PLL/QSdLHr16rXJDPfo0SO6dev2j3IO/9aWcvm/JkyYEPPnz4/XXnst9txzz9Ycky5kS5lcunRp1NXVxbBhw6KsrCzKyspi0aJFcc8990RZWVmsX7++jSanNSjedCoVFRVx8MEHx4IFC4rnmpqaYsGCBXHEEUds9tqqqqrYY4894o8//ohnnnkmTjnllOJrw4cP3+jPj3z22Wex9957t+wG6HRyZXLdunXNnoBHRJSWlkZTU1PLbgAi4ogjjmiW4YiImpqaYob/Tc7hn9pSLiMiUkoxYcKEeO655+LVV1+Nfv36tfaYdCFbyuR//vOf+PDDD2PFihXFr0MOOSTGjBkTK1asiNLS0rYYm9bS1p/uBi1t3rx5qbKyMj366KNp5cqV6eKLL07bb799WrNmTUoppbFjx6apU6cW1y9evDg988wz6fPPP0+vv/56OvbYY1O/fv3Sjz/+WFyzZMmSVFZWlm666aa0atWqNHfu3NS9e/f0xBNPtPb26IByZLK6ujrtscceaf78+am2tjY9++yzaeedd05Tpkxp7e3RATU0NKTly5en5cuXp4hId9xxR1q+fHn68ssvU0opTZ06NY0dO7a4/osvvkjdu3dPkydPTh9//HGaPXt2Ki0tTS+//HJxzZZyDluSI5eXXnpp6tmzZ1q4cGFavXp18WvdunWtvj86nhyZ3JBPNe86FG86pZkzZ6a99torVVRUpMMOOywtXry4+NqIESNSdXV18XjhwoVp3333TZWVlWmnnXZKY8eOTd98881G93zxxRfTAQcckCorK9OgQYPS/fff3xpboZNo6UzW19eniRMnpr322itVVVWl/v37p6uvvjr99ttvrbUlOrDXXnstRcRGX3/msLq6Oo0YMWKjaw466KBUUVGR+vfvnx555JGN7ru5nMOW5Mjlpu4XEZvML2wo1/fK/6V4dx2FlFJqvefrAAAA0LV4jzcAAABkpHgDAABARoo3AAAAZKR4AwAAQEaKNwAAAGSkeAMAAEBGijcAAABkpHgDAABARoo3AAAAZKR4A0AXNW7cuCgUClEoFKK8vDz69esXU6ZMiV9//bWtRwOATqWsrQcAANrO8ccfH4888kg0NjbG0qVLo7q6OgqFQsyYMaOtRwOATsMTbwDowiorK6NXr17Rp0+fOPXUU2PkyJFRU1MTERF9+/aNu+66q9n6gw46KK677rricaFQiAcffDBOO+206N69ewwcODBeeOGFVtwBALR/ijcAEBERH330Ubz11ltRUVHxt667/vrr46yzzooPPvggTjzxxBgzZkz88MMPmaYEgI5H8QaALmz+/Pmx7bbbRlVVVQwePDjq6upi8uTJf+se48aNi3PPPTcGDBgQN998c/z888+xZMmSTBMDQMfjPd4A0IUdc8wxMWfOnFi7dm3ceeedUVZWFmecccbfuseBBx5Y/Pc222wTPXr0iLq6upYeFQA6LE+8AaAL22abbWLAgAExZMiQePjhh+Odd96Jhx56KCIiSkpKIqXUbH1jY+NG9ygvL292XCgUoqmpKd/QANDBKN4AQET8X9G+6qqr4pprrolffvkldtlll1i9enXx9fr6+qitrW3DCQGgY1K8AYCiM888M0pLS2P27Nlx7LHHxuOPPx5vvPFGfPjhh1FdXR2lpaVtPSIAdDje4w0AFJWVlcWECRPi1ltvjVWrVkVtbW2cdNJJ0bNnz7jxxhs98QaAf6CQNnzzFgAAANBi/Ko5AAAAZKR4AwAAQEaKNwAAAGSkeAMAAEBGijcAAABkpHgDAABARoo3AAAAZKR4AwAAQEaKNwAAAGSkeAMAAEBGijcAAABkpHgDAABARv8FsLmILsPryWYAAAAASUVORK5CYII=\n" + "image/png": "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i+vhhx92fNYpl7hMnTpVM2bMcBzvL7/8Iun6LJQGDRrIz89PBQsWVLt27bRv3z6n90hMTNTgwYMdn39QUJCaNWumnTt3OtaJjY1Vhw4dFBwcLG9vb4WEhKhLly6Kj4/P0PH+k81mU/369WWM0W+//ebU/s/7AaQoXbq006U0Kb8XvvnmGw0dOlSBgYHy8/PTQw89pDNnzjht+/333ysqKkpFixaVj4+PwsPD1atXr0zXDADpYXo5ALhIyj+IixQpIkn67LPPJEndu3dPc/18+fKpW7duGjdunL755htLp5neWFv//v21cOFC9ezZU4MGDdLhw4f1+uuva9euXfrmm2/k4eHh2PbAgQPq2rWr+vfvr759+yokJESLFi3SxIkTdeHCBcXExEi6PvXeGKO2bdtq48aN6t27t6pXr67Vq1dr+PDhOn78eKqp6Bs2bNBHH32kgQMHqmjRoipdurTjuvgnn3xSwcHBGjdunLZt26a5c+eqYMGC2rp1q0qVKqVJkybpiy++0JQpU1S5cmWnfn7llVfUtm1bPfroo7p69ao++OADderUSStXrlSrVq2catiyZYuWLVum//73vypQoIBeffVVdejQQUePHnX014kTJ1S7dm2dP39e/fr1U/ny5XX8+HEtWbJEly5dkqenpy5duqRGjRrp+PHj6t+/v0qVKqWtW7dq5MiROnnypGbMmHHTz2jr1q2qXLmyU9/fTMpNygoVKuRo27t3r+rVq6eSJUtqxIgR8vPz00cffaT27dtr6dKleuihhyRJFy5cUIMGDbRv3z716tVLNWvW1NmzZ7VixQr98ccfKlq0qBISEvTmm2+qa9eu6tu3rxITE/XWW28pKipK3333neMSijsRFham9evX648//lBISMhN1+3du7cWLlyoFi1aqE+fPrp27Zo2b96sbdu2qVatWpKkPn366O2331bHjh319NNPa/v27YqJidG+ffv0ySefOO3vxnF99913Z/ozjIyM1PTp07V3715Vrlz5lse7ePFiNWnSRMHBwerSpYtGjBihzz77TJ06dXKsk5ycrNatW2v9+vXq0qWLnnrqKSUmJmrt2rXas2eP0+UlCxYs0OXLl9WvXz95eXmpcOHCWrdunVq0aKEyZcpo7Nix+vvvv/Xaa6+pXr162rlzp0qXLi3p+vT4JUuWaODAgapYsaL+/PNPbdmy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ffp0NW7cWO3bt1e3bt2cvi8AcCcI3QCQTcqVK3fT67ArVKigTz/9VD/99FO6N8f66aefJCnds723q2HDhipatGiay+x2u4KCgtJ9bM+NgeNO/5F8Mzfbt7u7e4bb/xlWN2/erLZt26phw4Z64403VLx4cXl4eGjBggVpPvs5vfe5WQBOi91uV7NmzfTMM8+kufyuu+666fZFihRJ9ceDf6pdu7bjTHv79u1Vv359devWTQcOHFD+/PkdN/oaNmxYujMTbgykN/Puu++qR48eat++vYYPH66goCC5u7srJiYm1c3bsoKvr68aNGigBg0aqGjRoho3bpy+/PJLRUdHZ2o/GT2LmtbYy+xnmPJ5pfddSxEbG6sdO3ZIuv5740aLFy92hO7MuJPvZufOndWgQQN98sknWrNmjaZMmaLJkydr2bJlatGihSTp5ZdfVo8ePbR8+XKtWbNGgwYNUkxMjLZt23bLa/Dd3d2dfj9GRUWpfPny6t+/f5o39rtRcnJyuvtNyz//ALJkyRJt27ZNn332mVavXq1evXrp5Zdf1rZt25Q/f/5bvjcA3AqhGwByiNatWysmJkbvvPNOmqE7OTlZ7733ngoVKqR69eplW10RERFat26d6tWrl+WBOiwsTOvWrVNiYqLT2e79+/c7lltt6dKl8vb21urVq53ObC1YsOC29hcYGCh/f3/t2bPnputFRETowoULt31DvPLlyzvuLn8rKeG3SZMmev311zVixAjHGUoPD49b1hAREXHL41myZInKlCmjZcuWOQXZtKZ4Z7WUPy6cPHlS0vV6V69erb/++ivds91hYWGy2+2KjY11zKyQpNOnT+v8+fMZGnuZ/QxTPq9/vl9aFi9eLA8PDy1atChVaNyyZYteffVVHT16VKVKlVJERIS2b9+upKSkDN9UL0XKMR44cCDVsv3796to0aLy8/NztBUvXlz//e9/9d///ldxcXGqWbOmJk6c6AjdklSlShVVqVJF//vf/7R161bVq1dPs2fP1oQJEzJVW/HixTVkyBDHjRHvvfdeSdfPVJ8/f95p3atXrzo++9t177336t5779XEiRP13nvv6dFHH9UHH3ygPn363NF+AUCSuKYbAHKIunXrqmnTplqwYIFWrlyZavnzzz+vX3/9Vc8884ylZ5Nv1LlzZyUnJ2v8+PGpll27di3VP4Azo2XLlkpOTtbrr7/u1D59+nTZbDanf8xbxd3dXTabzelM2ZEjR/Tpp5/e1v7c3NzUvn17ffbZZ06Pp0qRcoatc+fO+vbbb7V69epU65w/f17Xrl276fvcd9992rNnT6rHW6WncePGql27tmbMmKHLly8rKChIjRs31pw5c9IMLP98rFKHDh30448/prqj9z+PJyUc/vOM//bt2/Xtt99mqL6MWL9+fZrtKdcep0yT7tChg4wxGjduXLr1tmzZUpJS3WF82rRpkpTqrvVpyexn+MMPPyggIECVKlW66X5Tpmc/8sgj6tixo9PP8OHDJUnvv/++41jPnj2b6jv0z2NNT/HixVW9enW9/fbbTt/jPXv2aM2aNY4+Sk5OTvXYr6CgIJUoUcIx/hISElIdb5UqVeTm5pbhMXqjJ598Ur6+vnrxxRcdbREREamulZ87d266Z7pv5dy5c6n6KeVO+7dbNwDciDPdAJCDvPPOO3rggQfUrl07devWTQ0aNNCVK1e0bNkybdq0SY888ojjH93ZpVGjRurfv79iYmK0e/duNW/eXB4eHoqNjdXHH3+sV155RR07drytfbdp00ZNmjTR888/ryNHjqhatWpas2aNli9frsGDBztdW26VVq1aadq0aXrwwQfVrVs3xcXFaebMmSpbtqxjOn9mTZo0SWvWrFGjRo3Ur18/VahQQSdPntTHH3+sLVu2qGDBgho+fLhWrFih1q1bq0ePHoqMjNTFixf1888/a8mSJTpy5MhNpyG3a9dO48eP11dffaXmzZtnqK7hw4erU6dOWrhwoZ544gnNnDlT9evXV5UqVdS3b1+VKVNGp0+f1rfffqs//vhDP/74o2O7JUuWqFOnTurVq5ciIyP1119/acWKFZo9e7aqVaum1q1ba9myZXrooYfUqlUrHT58WLNnz1bFihV14cKF2+rHtI45PDxcbdq0UUREhC5evKh169bps88+0z333KM2bdpIkpo0aaLHH39cr776qmJjY/Xggw/Kbrdr8+bNatKkiQYOHKhq1aopOjpac+fO1fnz59WoUSN99913evvtt9W+fXs1adIkQ/2Zmc9w7dq1atOmzU2ntG/fvl0HDx7UwIED01xesmRJ1axZU4sXL9azzz6r7t2765133tHQoUP13XffqUGDBo5++e9//6t27drd9BimTJmiFi1a6L777lPv3r0djwwLCAhwPA87MTFRISEh6tixo6pVq6b8+fNr3bp12rFjh15++WVJ1x/nN3DgQHXq1El33XWXrl275jhTn5H7AaSlSJEi6tmzp9544w3t27dPFSpUUJ8+ffTEE0+oQ4cOatasmX788UetXr36llP20/P222/rjTfe0EMPPaSIiAglJiZq3rx58vf3d/zRAQDumAvumA4AeU5GHhk2ZcqUDO0rMTHRjB071lSqVMn4+PiYAgUKmHr16pmFCxc6PfrmRnfyyLAzZ87cct25c+eayMhIR01VqlQxzzzzjDlx4oRjnbCwMNOqVas0t0/rkWHGXD/eIUOGmBIlShgPDw9Trlw5M2XKlFTHKinNRxalPBroxkf+pHdsKY8n+qe33nrLlCtXznh5eZny5cubBQsWOLbPSA03Pq7IGGN+//130717d8ejusqUKWMGDBjg9FitxMREM3LkSFO2bFnj6elpihYtaurWrWumTp1qrl69mup9blS1alXTu3fvDPWHMcYkJyebiIgIExERYa5du2aMMebQoUOme/fuJjg42Hh4eJiSJUua1q1bmyVLljht++eff5qBAweakiVLGk9PTxMSEmKio6PN2bNnjTHXH081adIkExYWZry8vEyNGjXMypUrTXR0tAkLC0vVj7fzyLD333/fdOnSxURERBgfHx/j7e1tKlasaJ5//nmTkJDgtO61a9fMlClTTPny5Y2np6cJDAw0LVq0MD/88INjnaSkJDNu3DgTHh5uPDw8TGhoqBk5cqTTI9SMufm4zuhnuG/fPsej3G7mySefNJLMoUOH0l1n7NixRpL58ccfjTHXH3n3/PPPO44jODjYdOzY0bGPW/0OWrdunalXr57x8fEx/v7+pk2bNuaXX35xLL9y5YoZPny4qVatmilQoIDx8/Mz1apVM2+88YZjnd9++8306tXLREREGG9vb1O4cGHTpEmTWx6vMWl/J1McOnTIuLu7O75fycnJ5tlnnzVFixY1vr6+Jioqyhw8eDDdR4bd+D3YuHGjkWQ2btxojDFm586dpmvXrqZUqVLGy8vLBAUFmdatW5vvv//+lnUDQEbZjMnknV8AAECOsGjRIg0YMEBHjx5N9473yBkGDx6sr7/+Wj/88MMdPQILAJD7ELoBAMil7Ha7qlatqq5du+r55593dTlIx59//qmwsDB99NFHTFkGgH8hQjcAAAAAABbh7uUAAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARfK5uoCcyG6368SJEypQoACP9QAAAAAApGKMUWJiokqUKCE3t/TPZxO603DixAmFhoa6ugwAAAAAQA537NgxhYSEpLuc0J2GAgUKSLreef7+/i6uBjlBUlKS1qxZo+bNm8vDw8PV5QBZivGNvIzxjbyM8Y28LDeM74SEBIWGhjryY3oI3WlImVLu7+9P6Iak6196X19f+fv759gvPXC7GN/IyxjfyMsY38jLctP4vtUlydxIDQAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACL5IjQPXPmTJUuXVre3t6qU6eOvvvuu3TXXbhwoWw2m9OPt7e3Y3lSUpKeffZZValSRX5+fipRooS6d++uEydOZMehAAAAAADg4PLQ/eGHH2ro0KEaM2aMdu7cqWrVqikqKkpxcXHpbuPv76+TJ086fn7//XfHskuXLmnnzp0aNWqUdu7cqWXLlunAgQNq27Zt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TtsXLFhQkpzaP/74YwUGBqpUqVL6+eef9dRTT6l9+/Zq3rx5th0XAAAAAACSi0P3I488ojNnzmj06NE6deqUqlevrlWrVjlurnb06FG5uWXuZPzJkyc1dOhQnT59WsWLF1f37t01atQoK8oHAAAAAOCmXH4jtYEDB2rgwIFpLtu0adNNt124cGGqtkGDBmnQoEFZUBkAAAAAAHfGZdd0AwAAAACQ1xG6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALCIy0P3zJkzVbp0aXl7e6tOnTr67rvvMrTdBx98IJvNpvbt2zu1X7hwQQMHDlRI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5efnp7Zt2+rYsWOp1tu+fbsefPBBBQQEyNfXV40aNdI333zjtE5KTb/88ou6deumQoUKqX79+jc95t9++02dOnVS4cKF5evrq3vvvVeff/65Y3nKtFZjjGbOnOmY3nqnjh8/rl69eqlYsWLy8vJSpUqVNH/+fKd1rl69qtGjRysyMlIBAQHy8/NTgwYNtHHjRsc6R44cUWBgoCRp3LhxjvpSPqvGjRunefa7R48eKl26tNN+bDabpk6dqhkzZigiIkJeXl765ZdfJEn79+9Xx44dVbhwYXl7e6tWrVpasWKF0z6TkpI0btw4lStXTt7e3ipSpIjq16+vtWvX3rQvDh06pJCQkFSBW5KCgoJStX355Zdq0KCB/Pz8VKBAAbVq1Up79+696XukePfddxUZGSkfHx8VLlxYXbp0SXe8tWzZUoUKFZKfn5+qVq2qV155RdL1vps5c6Yk50sJUtjtds2YMUOVKlWSt7e3ihUrpv79++vcuXNO72GM0YQJExQSEiJfX181adIkw8eR4ujRo9q8ebO6dOmiLl266PDhw9q6dWu6x167dm35+vqqUKFCatiwodasWeNYXrp0abVu3VqrV69WrVq15OPjozlz5ki69fckxWuvvaZKlSo53qNWrVp67733HMsTExM1ePBglS5dWl5eXgoKClKzZs20c+fOTB13igYNGki6PoZS3M6Ynzt3rmPM33PPPdqxY4fTtqdOnVLPnj0VEhIiLy8vFS9eXO3atdORI0duq24AyGqc6QYAFwsPD1f37t01b948jRgxIkvPdj/yyCOqUKGCXnzxRX3++eeaMGGCChcurDlz5uj+++/X5MmTtXjxYg0bNkz33HOPGjZs6LT9xIkTZbPZ9OyzzyouLk4zZsxQ06ZNtXv3bscZtg0bNqhFixaKjIzUmDFj5ObmpgULFuj+++/X5s2bVbt2bad9durUSeXKldOkSZNkjEm39tOnT6tu3bq6dOmSBg0apCJFiujtt99W27ZttWTJEj300ENq2LChFi1apMcffzzNKePpuXz5ss6ePevUVqBAAXl5een06dO69957ZbPZNHDgQAUGBurLL79U7969lZCQoMGDB0uSEhIS9Oabb6pr167q27evEhMT9dZbbykqKkrfffedqlevrsDAQM2aNUv/+c9/9NBDD+nhhx+WJFWtWjVDdd5owYIFunz5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V++mATZlbMXGxjqd5T1z5kyGpjB/9dVX+uOPP/TCCy84zjinOHfunPr166dPP/1Ujz32mCIiImS32/XLL7+k+4erm8nM98TPz0+PPPKIHnnkEV29elUPP/ywJk6cqJEjRzqeo128eHH997//1X//+1/FxcWpZs2amjhxYoZC9z+l/AGqSZMmev311x1/SLzTMZ+eiIgIPf3003r66acVGxur6tWr6+WXX9a77757R/sFgKzANd0AkINEREToscce05w5c3Tq1CmnZf7+/ipatKi+/vprp/Y33njDsnreeecdJSYmOl4vWbJEJ0+edPwDPDIyUhEREZo6daouXLiQavszZ87c9nu3bNlS3333nb799ltH28WLFzV37lyVLl06Q9NxM8vd3V0dOnTQ0qVLtWfPnlTL/3k8KWfg/nnGbfv27U71SpKvr6+k1H8ska5/3vv373fa748//pjqcWvpCQoKUuPGjTVnzpw07wXwz/3eePlA/vz5VbZsWV25cuWm77F582anqfMpUq7rv/vuuyVJUVFR8vf316RJk9Jc/2Zj4eGHH5a7u7vGjRuX6iyoMcZRe82aNRUeHq4ZM2ak6s9/bpfy7Pcb1+ncubOSk5M1fvz4VDVcu3bNsX7Tpk3l4eGh1157zWm/M2bMSPcY/illavnw4cPVsWNHp5++ffuqXLlyjrPt7du3l5ubm1544YVU9z/IyOyTjH5Pbvz8PT09VbFiRRljlJSUpOTkZMXHxzutExQUpBIlStxyjKSncePGql27tmbMmKHLly9LuvMxf6NLly459p0iIiJCBQoUuO26ASCrcaYbAHKY559/XosWLdKBAwdUqVIlp2V9+vTRiy++qD59+qhWrVr6+uuv9euvv1pWS+HChVW/fn317NlTp0+f1owZM1S2bFn17dtXkuTm5qY333xTLVq0UKVKldSzZ0+VLFlSx48f18aNG+Xv76/PPvvstt57xIgRev/999WiRQsNGjRIhQsX1ttvv63Dhw9r6dKlqW46lVVefPFFbdy4UXXq1FHfvn1VsWJF/fXXX9q5c6fWrVunv/76S5LUunVrLVu2TA899JBatWqlw4cPa/bs2apYsaLTHyB8fHxUsWJFffjhh7rrrrtUuHBhVa5cWZUrV1avXr00bdo0RUVFqXfv3oqLi9Ps2bNVqVIlJSQkZKjemTNnqn79+qpSpYr69u2rMmXK6PTp0/r222/1xx9/6Mcff5QkVaxYUY0bN1ZkZKQKFy6s77//3vF4qJuZPHmyfvjhBz388MOOGQ47d+7UO++8o8KFCztuLubv769Zs2bp8ccfV82aNdWlSxcFBgbq6NGj+vzzz1WvXj29/vrrab5HRESEJkyYoJEjR+rIkSNq3769ChQooMOHD+uTTz5Rv379NGzYMLm5uWnWrFlq06aNqlevrp49e6p48eLav3+/9u7d67hBWWRkpCRp0KBBioqKkru7u7p06aJGjRqpf//+iomJ0e7du9W8eXN5eHgoNjZWH3/8sV555RV17NhRgYGBGjZsmGJiYtS6dWu1bNlSu3bt0pdffpnqfgg3unLlipYuXapmzZo5zh7fqG3btnrllVcUFxensmXL6vnnn9f48ePVoEEDPfzww/Ly8tKOHTtUokQJxcTE3PT9Mvo9ad68uYKDg1WvXj0VK1ZM+/bt0+uvv65WrVqpQIECOn/+vEJCQtSxY0dVq1ZN+fPn17p167Rjxw69/PLLN63hZoYPH65OnTpp4cKFeuKJJ7JkzP/Tr7/+qgceeECdO3dWxYoVlS9fPn3yySc6ffq0unTpctt1A0CWyua7pQMA/r9/PjLsRtHR0UZSqkf8XLp0yfTu3dsEBASYAgUKmM6dO5u4uLh0Hxl25syZVPv18/NL9X43Pp4s5ZFh77//vhk5cqQJCgoyPj4+plWrVub3339Ptf2uXbvMww8/bIoUKWK8vLxMWFiY6dy5s1m/fv0ta7qZQ4cOmY4dO5qCBQsab29vU7t2bbNy5cpU6ymTjwy71bqnT582AwYMMKGhocbDw8MEBwebBx54wMydO9exjt1uN5MmTTJhYWHGy8vL1KhRw6xcuTLVo4+MMWbr1q0mMjLSeHp6pvqs3n33XVOmTBnj6elpqlevblavXp3u45PSeyzSoUOHTPfu3U1wcLDx8PAwJUuWNK1btzZLlixxrDNhwgRTu3ZtU7BgQePj42PKly9vJk6caK5evXrTvvjmm2/MgAEDTOXKlU1AQIDx8PAwpUqVMj169DCHDh1Ktf7GjRtNVFSUCQgIMN7e3iYiIsL06NHDfP/99451bnxkWIqlS5ea+vXrGz8/P+Pn52fKly9vBgwYYA4cOOC03pYtW0yzZs1MgQIFjJ+fn6latap57bXXHMuvXbtmnnzySRMYGGhsNluq95o7d66JjIw0Pj4+pkCBAqZKlSrmmWeeMSdOnHCsk5ycbMaNG2eKFy9ufHx8TOPGjc2ePXtMWFjYTR8ZtnTpUiPJvPXWW+mus2nTJqdH7xljzPz5802NGjWMl5eXKVSokGnUqJFZu3atY3lYWFi6j3zLyPdkzpw5pmHDho7vaEREhBk+fLiJj483xhhz5coVM3z4cFOtWjVHv1arVs288cYb6R5Hipv9LktOTjYREREmIiLCXLt2zRhz52P+n9+hs2fPmgEDBpjy5csbPz8/ExAQYOrUqWM++uijW9YNANnFZsxt3DkHAAAAAADcEtd0AwAAAABgEUI3AAAAAAAWIXQDAAAAAGARQjcAAAAAABYhdAMAAAAAYBFCNwAAAAAAFsnn6gJyIrvdrhMnTqhAgQKy2WyuLgcAAAAAkMMYY5SYmKgSJUrIzS3989mE7jScOHFCoaGhri4DAAAAAJDDHTt2TCEhIekuJ3SnoUCBApKud56/v7+Lq0FOkJSUpDVr1qh58+by8PBwdTlAlmJ8Iy9jfCMvY3wjL8sN4zshIUGhoaGO/JgeQncaUqaU+/v7E7oh6fqX3tfXV/7+/jn2Sw/cLsY38jLGN/Iyxjfystw0vm91STI3UgMAAAAAwCKEbgAAAAAALELoBgAAAADAIoRuAAAAAAAsQugGAAAAAMAihG4AAAAAACxC6AYAAAAAwCKEbgAAAAAALELoBgAAAADAIoRuAAAAAAAsQugGAAAAAMAihG4AAAAAACxC6AYAAAAAwCKEbgAAAAAALELoBgAAAADAIoRuAAAAAAAskuND9/Hjx/XYY4+pSJEi8vHxUZUqVfT999+nu/6WLVtUr149x/rly5fX9OnTs7FiAAAAAACuy+fqAm7m3Llzqlevnpo0aaIvv/xSgYGBio2NVaFChdLdxs/PTwMHDlTVqlXl5+enLVu2qH///vLz81O/fv2ysXoAAAAAwL9djg7dkydPVmhoqBYsWOBoCw8Pv+k2NWrUUI0aNRyvS5curWXLlmnz5s2EbgAAAABAtsrR08tXrFihWrVqqVOnTgoKClKNGjU0b968TO1j165d2rp1qxo1amRRlQAAAAAApC1Hn+n+7bffNGvWLA0dOlTPPfecduzYoUGDBsnT01PR0dE33TYkJERnzpzRtWvXNHbsWPXp0yfdda9cuaIrV644XickJEiSkpKSlJSUlDUHg1wtZRwwHpAXMb6RlzG+kZcxvpGX5YbxndHabMYYY3Ett83T01O1atXS1q1bHW2DBg3Sjh079O23395028OHD+vChQvatm2bRowYoddff11du3ZNc92xY8dq3Lhxqdrfe+89+fr63tlBAAAAAADynEuXLqlbt26Kj4+Xv79/uuvl6NAdFhamZs2a6c0333S0zZo1SxMmTNDx48czvJ8JEyZo0aJFOnDgQJrL0zrTHRoaqrNnz9608/DvkZSUpLVr16pZs2by8PBwdTlAlmJ8Iy9jfCMvY3wjL8sN4zshIUFFixa9ZejO0dPL69Wrlyoo//rrrwoLC8vUfux2u1OovpGXl5e8vLxStXt4eOTYDxiuwZhAXsb4Rl7G+EZexvhGXpaTx3dG68rRoXvIkCGqW7euJk2apM6dO+u7777T3LlzNXfuXMc6I0eO1PHjx/XOO+9IkmbOnKlSpUqpfPnykqSvv/5aU6dO1aBBg1xyDAAAAACAf68cHbrvueceffLJJxo5cqReeOEFhYeHa8aMGXr00Ucd65w8eVJHjx51vLbb7Ro5cqQOHz6sfPnyKSIiQpMnT1b//v1dcQgAAAAAgH+xHB26Jal169Zq3bp1ussXLlzo9PrJJ5/Uk08+aXFVAAAAAADcWo5+TjcAAAAAALkZoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALBIjg/dx48f12OPPaYiRYrIx8dHVapU0ffff5/u+suWLVOzZs0UGBgof39/3XfffVq9enU2VgwAAAAAwHU5OnSfO3dO9erVk4eHh7788kv98ssvevnll1WoUKF0t/n666/VrFkzffHFF/rhhx/UpEkTtWnTRrt27crGygEAAAAAkPK5uoCbmTx5skJDQ7VgwQJHW3h4+E23mTFjhtPrSZMmafny5frss89Uo0YNK8oEAAAAACBNOfpM94oVK1SrVi116tRJQUFBqlGjhubNm5epfdjtdiUmJqpw4cIWVQkAAAAAQNpy9Jnu3377TbNmzdLQoUP13HPPaceOHRo0aJA8PT0VHR2doX1MnTpVFy5cUOfOndNd58qVK7py5YrjdUJCgiQpKSlJSUlJd3YQyBNSxgHjAXkR4xt5GeMbeRnjG3lZbhjfGa3NZowxFtdy2zw9PVWrVi1t3brV0TZo0CDt2LFD33777S23f++999S3b18tX75cTZs2TXe9sWPHaty4cWlu7+vre3vFAwAAAADyrEuXLqlbt26Kj4+Xv79/uuvl6DPdxYsXV8WKFZ3aKlSooKVLl95y2w8++EB9+vTRxx9/fNPALUkjR47U0KFDHa8TEhIUGhqq5s2b37Tz8O+RlJSktWvXqlmzZvLw8HB1OUCWYnwjL2N8Iy9jfCMvyw3jO2WG9K3k6NBdr149HThwwKnt119/VVhY2E23e//999WrVy998MEHatWq1S3fx8vLS15eXqnaPTw8cuwHDNdgTCAvY3wjL2N8Iy9jfCMvy8njO6N15egbqQ0ZMkTbtm3TpEmTdPDgQb333nuaO3euBgwY4Fhn5MiR6t69u+P1e++9p+7du+vll19WnTp1dOrUKZ06dUrx8fGuOAQAAAAAwL9Yjg7d99xzjz755BO9//77qly5ssaPH68ZM2bo0Ucfdaxz8uRJHT161PF67ty5unbt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HjzY6Ny5s/1x2i3DBg0aZOzZs8f47LPP3OeWYfPnG4bNduPn5in005a54DT6WRrH27k43s7F8XYujrdzcbydi+PtXBxv5+J4O1cWO96ZzY2mhG5fX19j//79GZbv27fP8PX1vad9LVq0yKhUqZLh6+trlCtXzpg4cWK69V27djXq1auXbtmqVauMatWqGT4+PkaJEiWMadOm3VObLhu6DePW960LC3O5Dug2ON7OxfF2Lo63c3G8nYvj7Vwcb+fieDsXx9u5stDxdvp9um8WFhamcePG6bnnnku3fO7cuRo4cKCOHTvm6CYdyiWHl98sJUVat046fVoqVEh67DGXGWLhllJSlLxqlaKWLFG1pk3l1aABx9tM9G/non87F/3buejfzkX/di76t3PRv50ri/TvzOZGUyZS6927t1588UUdPnxYtWvXlnTjmu7Ro0enm7AM98nTU6pf3+oqsg9PTxn16ulkbOyNSRtc8B+8W6F/Oxf927no385F/3Yu+rdz0b+di/7tXG7Wv00J3UOHDlXOnDk1duxY+/2yQ0NDNXz4cPXp08eMJgEAAAAAcDmmhG6bzab+/furf//+unbtmiQpZ86cZjQFAAAAAIDLMu0+3WkI2wAAAACA7MrD6gIAAAAAAHBXhG4AAAAAAExC6AYAAAAAwCQOD91JSUlq2LChDhw44OhdAwAAAACQpTg8dHt7e2v79u2O3i0AAAAAAFmOKcPLO3XqpClTppixawAAAAAAsgxTbhmWnJysqVOnasWKFapRo4YCAwPTrR83bpwZzQIAAAAA4FJMCd07d+5U9erVJUn79+9Pt85ms5nRJAAAAAAALseU0L1q1SozdgsAAAAAQJZi6i3DDh48qGXLlun69euSJMMwzGwOAAAAAACXYkrovnjxoho2bKgyZcqoWbNmOn36tCSpZ8+eeuONN8xoEgAAAAAAl2NK6O7fv7+8vb117NgxBQQE2Jc///zzWrp0qRlNAgAAAADgcky5pnv58uVatmyZihQpkm556dKl9ddff5nRJAAAAAAALseUM92xsbHpznCnuXTpknx9fc1oEgAAAAAAl2NK6H7sscc0Y8YM+2ObzabU1FSNGTNGDRo0MKNJAAAAAABcjinDy8eMGaOGDRtq06ZNSkxM1Jtvvqldu3bp0qVL+vXXX81oEgAAAAAAl2PKme5KlSpp//79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t1tuO2vWLNWqVUsBAQHKkyePHn/8cS1fvty+vlixYnr66ae1bNky1axZU/7+/vrf//4n6e79PM2ECRNUsWJFexs1a9bU7Nmz7euvXbumfv36qVixYvL19VWBAgXUuHFjbdmy5Z5ed5rHHntMknTo0CH7svr169/yMoJu3bqpWLFi9sdp71f/+c9/NHHiRJUsWVK+vr566KGH9Oeff6Z77pkzZ9S9e3cVKVJEvr6+KlSokFq2bKmjR4/eV90A4Gyc6QYAF1e8eHF16dJFkyZN0uDBgx16tvv5559X+fLl9dFHH+nnn3/W+++/r7x58+p///ufnnjiCY0ePVpff/21Bg4cqIceekiPP/54uud/8MEHstlseuutt3Tu3DmNHz9ejRo1UlRUlP0M3cqVK9W0aVPVqFFD7733njw8PDRt2jQ98cQTWrdunWrVqpVun88995xKly6tDz/8UIZh3Lb2s2fPqnbt2oqLi1OfPn2UL18+ffXVV3rmmWc0b948tW7dWo8//rhmzpypzp0724eM34/Lly/r8uXL6YZQ3267Zs2aqV27durQoYPmzp2r//u//5OPj4969Ogh6UYofOaZZ7R+/Xq9+OKLKl++vHbs2KGPP/5Y+/fv18KFC++rvqeeekpt2rRRu3btNG/ePL311luqXLmymjZtek/t7tq1S08//bSqVKmikSNHytfXVwcPHszwJcm92rVrl+rUqaPChQtr8ODBCgwM1Ny5c9WqVSvNnz9frVu3lnTjy5dRo0apV69eqlWrlqKjo7Vp0yZt2bJFjRs31ksvvaRTp04pMjJSM2fOzNDOSy+9pOnTp6t79+7q06ePjhw5ov/+97/aunWrfv31V3l7e0uShg0bpvfff1/NmjVTs2bNtGXLFjVp0kSJiYmZfk3ffPONAgMD9fTTT8vf318lS5bU119/rdq1a6fbbsSIERo+fLhq166tkSNHysfHRxs2bNDKlSvVpEkT+3b79u1Thw4d9NJLL6l3794qW7Zspvq5JE2aNEl9+vRR27Zt1bdvX8XHx2v79u3asGGDOnbsKEl6+eWXNW/ePL322muqUKGCLl68qPXr12vPnj2qXr36vf1CJXvozZMnzz0/N83s2bN17do1vfTSS7LZbBozZozatGmjw4cP239Xzz77rHbt2qXXX39dxYoV07lz5xQZGaljx46lC/IA4LIM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qqurdc011+jll1+WJMXHx2vXrl166623KLrh0T766CMtXLhQ77//vrp37660tDQ98cQTiomJ4dwG3BTt5cAV+NWvfqVly5bpq6++UqtWrUzHARy2bds2HT9+XAkJCfL395e/v7/Wr1+vv/3tb/L391dVVZXpiIBDoqOj1a1btwse69q1qw4dOmQoEeAcv/nNbzR9+nSNHz9ePXv21IMPPqgnn3xSM2bMMB0NcKqoqChJ0rFjxy54/NixY7XPeQqKbuAybDabfvWrX2nJkiX68ssvFRsbazoS4BRDhw7Vzp07lZaWVvtxzTXX6P7771daWpr8/PxMRwQcctNNN120xWN6erratm1rKBHgHKWlpbJaL7yE9/PzU3V1taFEgGvExsYqKipKa9eurX2ssLBQW7Zs0Y033mgw2dWjvRy4jEcffVTvv/++PvvsM4WFhdWuH4mIiFBISIjhdEDdhYWFXTSbIDQ0VE2bNmVmAbzCk08+qX79+unll1/WPffco61bt+rf//63/v3vf5uOBjhk7Nix+tOf/qQ2bdqoe/fuSk1N1euvv66HH37YdDTgqhUXFyszM7P285ycHKWlpalJkyZq06aNnnjiCb300kuKi4tTbGysnnvuOcXExNROOPcUbBkGXIbFYvnJx+fPn69JkybVbxjAxQYNGsSWYfAqy5Yt0zPPPKOMjAzFxsZq2rRpmjp1qulYgEOKior03HPPacmSJTp+/LhiYmJ033336fnnn1dgYKDpeMBVWbdunQYPHnzR4xMnTtSCBQtks9n0wgsv6N///rfOnDmj/v3765///Kc6depkIG3dUXQDAAAAAOAirOkGAAAAAMBFKLoBAAAAAHARim4AAAAAAFyEohsAAAAAABeh6AYAAAAAwEUougEAAAAAcBGKbgAAAAAAXISiGwAAAAAAF6HoBgAAAADARSi6AQDwUZMmTZLFYpHFYlFAQIBiY2P129/+VufPnzcdDQAAr+FvOgAAADBn5MiRmj9/vioqKrRt2zZNnDhRFotFM2fONB0NAACvwJ1uAAB8WFBQkKKiotS6dWvddtttGjZsmJKTkyVJ7dq10xtvvHHB1/fp00e///3vaz+3WCyaM2eObr/9djVo0EBxcXFaunRpPf4JAABwbxTdAABAkrRr1y598803CgwMvKrve/HFF3XPPfdox44dGjVqlO6//36dPn3aRSkBAPAsFN0AAPiwZcuWqWHDhgoODlbPnj11/Phx/eY3v7mqY0yaNEn33XefOnbsqJdfflnFxcXaunWrixIDAOBZWNMNAIAPGzx4sN58802VlJToL3/5i/z9/XXnnXde1TF69epV+9+hoaEKDw/X8ePHnR0VAACPxJ1uAAB8WGhoqDp27KjevXtr3rx52rJli+bOnStJslqtstlsF3x9RUXFRccICAi44HOLxaLq6mrXhQYAwINQdAMAAEk1Rfbvfvc7Pfvsszp37pwiIyOVl5dX+3xhYaFycnIMJgQAwPNQdAMAgFp33323/Pz8NGvWLA0ZMkTvvvuuvv76a+3cuVMTJ06Un5+f6YgAAHgU1nQDAIBa/v7++tWvfqVXXnlFGRkZysnJ0ZgxYxQREaE//vGP3OkGAOAqWWz/vVgLAAAAAAA4Be3lAAAAAAC4CEU3AAAAAAAuQtENAAAAAICLUHQDAAAAAOAiFN0AAAAAALgIRTcAAAAAAC5C0Q0AAAAAgItQdAMAAAAA4CIU3QAAAAAAuAhFNwAAAAAALkLRDQAAAACAi1B0AwAAAADgIv8/fCIADzuH13UAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import confusion_matrix, classification_report\n", + "\n", + "# Assuming you have access to the best model and test data\n", + "best_model = best_tpot.fitted_pipeline_\n", + "y_pred = best_model.predict(X_test)\n", + "\n", + "# Print confusion matrix\n", + "print(\"Confusion Matrix:\")\n", + "print(confusion_matrix(y_test, y_pred))\n", + "\n", + "# Print classification report\n", + "print(\"\\nClassification Report:\")\n", + "print(classification_report(y_test, y_pred))\n", + "\n", + "# Check unique predictions\n", + "unique_predictions = np.unique(y_pred)\n", + "print(\"\\nUnique Predictions:\", unique_predictions)\n", + "\n", + "# Check class distribution in test set\n", + "unique_classes, class_counts = np.unique(y_test, return_counts=True)\n", + "print(\"\\nClass Distribution in Test Set:\")\n", + "for cls, count in zip(unique_classes, class_counts):\n", + " print(f\"Class {cls}: {count}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 218 + }, + "id": "8KwJfQvG0ZvJ", + "outputId": "13426649-eaaf-4fc9-8392-f648a79da6fe" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "error", + "ename": "NameError", + "evalue": "name 'best_tpot' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m# Assuming you have access to the best model and test data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mbest_model\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbest_tpot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfitted_pipeline_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbest_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'best_tpot' is not defined" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Handling Imbalanced Data" + ], + "metadata": { + "id": "RG5bRw2lt0GD" + } + }, + { + "cell_type": "code", + "source": [ + "from imblearn.over_sampling import SMOTE\n", + "from imblearn.under_sampling import RandomUnderSampler\n", + "from imblearn.pipeline import Pipeline\n", + "from sklearn.metrics import balanced_accuracy_score, roc_auc_score, average_precision_score\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.feature_selection import RFECV\n", + "from sklearn.preprocessing import QuantileTransformer\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from imblearn.over_sampling import SMOTE\n", + "from imblearn.pipeline import Pipeline as ImbPipeline\n", + "\n", + "\n", + "# Encode labels\n", + "le = LabelEncoder()\n", + "df['label_encoded'] = le.fit_transform(df['label'])\n", + "\n", + "# Split data\n", + "X = np.array(df['message_vector'].tolist())\n", + "y = df['label_encoded'].values\n", + "\n", + "# Split data for this run\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "\n", + "# Feature selection\n", + "feature_selector = RFECV(\n", + " estimator=RandomForestClassifier(n_estimators=10, class_weight='balanced', random_state=42),\n", + " step=5000,\n", + " min_features_to_select=1000,\n", + " cv=3,\n", + " scoring='balanced_accuracy',\n", + " n_jobs=-1\n", + ")\n", + "\n", + "\n", + "# Quantile transformer\n", + "quantile_transformer = QuantileTransformer(n_quantiles=1000, output_distribution='normal', random_state=42)\n", + "\n", + "# Dimensionality reduction\n", + "pca = PCA(n_components=0.95)\n", + "\n", + "# Create the pipeline\n", + "pipeline = ImbPipeline([\n", + " ('feature_selection', feature_selector),\n", + " ('quantile_transform', quantile_transformer),\n", + " ('pca', pca),\n", + " ('smote', SMOTE(random_state=42)),\n", + " ('classifier', RandomForestClassifier(class_weight='balanced', random_state=42))\n", + "])\n", + "\n", + "# Fit the pipeline and make predictions\n", + "pipeline.fit(X_train, y_train)\n", + "y_pred = pipeline.predict(X_test)\n", + "\n", + "# Calculate metrics\n", + "balanced_acc = balanced_accuracy_score(y_test, y_pred)\n", + "roc_auc = roc_auc_score(y_test, pipeline.predict_proba(X_test)[:, 1])\n", + "avg_precision = average_precision_score(y_test, pipeline.predict_proba(X_test)[:, 1])\n", + "\n", + "print(f\"Balanced Accuracy: {balanced_acc:.4f}\")\n", + "print(f\"ROC AUC: {roc_auc:.4f}\")\n", + "print(f\"Average Precision: {avg_precision:.4f}\")\n", + "\n", + "# Cross-validation\n", + "cv_scores = cross_val_score(pipeline, X, y, cv=5, scoring='balanced_accuracy')\n", + "print(f\"Cross-validation Balanced Accuracy: {cv_scores.mean():.4f} (+/- {cv_scores.std() * 2:.4f})\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zh-ULZZ0099E", + "outputId": "9bb9313a-7e4c-40bd-8c64-f78d1c57636d" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Balanced Accuracy: 0.6000\n", + "ROC AUC: 0.9933\n", + "Average Precision: 0.9999\n", + "Cross-validation Balanced Accuracy: 0.7230 (+/- 0.1013)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Fit the feature selector and print the number of selected features\n", + "feature_selector.fit(X_train, y_train)\n", + "print(f\"Number of features selected: {feature_selector.n_features_}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "brczGHV083MW", + "outputId": "54081516-0074-47d2-da92-ad921d8500f8" + }, + "execution_count": 60, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of features selected: 25000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Testing the predictions" + ], + "metadata": { + "id": "zCJ3jHyZQIS_" + } + }, + { + "cell_type": "code", + "source": [ + "test_message_benign = random_good_message\n", + "test_message_bad = random_bad_message\n", + "\n", + "\n", + "from tokenizers import Tokenizer\n", + "import torch\n", + "import numpy as np\n", + "import polars as pl\n", + "import numpy as np\n", + "\n", + "# Load the custom tokenizer\n", + "tokenizer = Tokenizer.from_file(\"log_tokenizer.json\")\n", + "\n", + "# Define the device (assuming you're using PyTorch and want to specify CPU or GPU)\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "vector_good = vectorize_text(test_message_benign).flatten()\n", + "print(len(vector_good))\n", + "\n", + "\n", + "# Assuming 'vector' is your input\n", + "vector_good = np.array(vector_good)\n", + "vector_2d_good = vector_good.reshape(1, -1)\n", + "\n", + "# Class prediction\n", + "prediction = pipeline.predict(vector_2d_good)\n", + "print(\"Predicted class:\", prediction[0])\n", + "\n", + "# Probability prediction\n", + "probabilities = pipeline.predict_proba(vector_2d_good)\n", + "print(\"Class probabilities:\", probabilities[0])\n", + "\n", + "\n", + "vector_bad = vectorize_text(test_message_bad).flatten()\n", + "print(len(vector_bad))\n", + "\n", + "# Assuming 'vector' is your input\n", + "vector_bad = np.array(vector_bad)\n", + "vector_2d_bad = vector_bad.reshape(1, -1)\n", + "\n", + "# Class prediction\n", + "prediction = pipeline.predict(vector_2d_bad)\n", + "print(\"Predicted class:\", prediction[0])\n", + "\n", + "# Probability prediction\n", + "probabilities = pipeline.predict_proba(vector_2d_bad)\n", + "print(\"Class probabilities:\", probabilities[0])\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3HpxPWlIPHT4", + "outputId": "4501c78a-74d8-49b7-bc3e-0c647ba5e71f" + }, + "execution_count": 53, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "30000\n", + "Predicted class: 1\n", + "Class probabilities: [0. 1.]\n", + "30000\n", + "Predicted class: 0\n", + "Class probabilities: [0.56 0.44]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Save the Supervised Learning Model (joblib)\n", + "\n", + "Generating the model can take roughly 1h of computation time on a modern 8 core / 64 GB RAM server." + ], + "metadata": { + "id": "YVPPGLSA6uZ-" + } + }, + { + "cell_type": "code", + "source": [ + "import joblib\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import f1_score\n", + "\n", + "\n", + "# Save the model using joblib\n", + "model_filename = 'manual_model_123.joblib'\n", + "joblib.dump(pipeline, model_filename)\n", + "\n", + "print(f\"\\nModel exported as joblib: {model_filename}\")\n", + "\n", + "\n", + "# Verify the saved model\n", + "try:\n", + " loaded_model = joblib.load(model_filename)\n", + "except Exception as e:\n", + " print(f\"\\nError verifying saved model: {str(e)}\")\n", + "\n", + "# Print information about how to use the saved model\n", + "print(\"\\nTo use the saved model in the future:\")\n", + "print(\"1. Load the model: loaded_model = joblib.load('best_tpot_nn_model.joblib')\")\n", + "print(\"2. Make predictions: predictions = loaded_model.predict(X)\")\n", + "print(\"Note: Make sure to preprocess your input data (X) the same way as during training.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lpbrnU_06Gfi", + "outputId": "007bae7d-2533-477b-b23f-8699f09321bb" + }, + "execution_count": 36, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Model exported as joblib: manual_model_123.joblib\n", + "\n", + "To use the saved model in the future:\n", + "1. Load the model: loaded_model = joblib.load('best_tpot_nn_model.joblib')\n", + "2. Make predictions: predictions = loaded_model.predict(X)\n", + "Note: Make sure to preprocess your input data (X) the same way as during training.\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Confusion matrix" + ], + "metadata": { + "id": "l1u70hEaAYgD" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Make predictions\n", + "y_pred = pipeline.predict(X_test)\n", + "\n", + "# Create the confusion matrix\n", + "cm = confusion_matrix(y_test, y_pred)\n", + "\n", + "# Create a ConfusionMatrixDisplay object\n", + "disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['good', 'bad'])\n", + "\n", + "# Plot the confusion matrix\n", + "plt.figure(figsize=(10, 7))\n", + "disp.plot(cmap='Blues', values_format='d')\n", + "plt.title('Confusion Matrix')\n", + "plt.show()\n", + "\n", + "# Print the confusion matrix\n", + "print(\"Confusion Matrix:\")\n", + "print(cm)\n", + "\n", + "# Calculate and print additional metrics\n", + "tn, fp, fn, tp = cm.ravel()\n", + "precision = tp / (tp + fp)\n", + "recall = tp / (tp + fn)\n", + "f1_score = 2 * (precision * recall) / (precision + recall)\n", + "\n", + "print(f\"\\nPrecision: {precision:.4f}\")\n", + "print(f\"Recall: {recall:.4f}\")\n", + "print(f\"F1-score: {f1_score:.4f}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 617 + }, + "id": "5GaLAsg661Qh", + "outputId": "a546f9f0-9c8f-433c-d5f5-8440a058f840" + }, + "execution_count": 37, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh0AAAHHCAYAAAAbLeozAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLIklEQVR4nO3de3zP9f//8ft7ZgfsvTlkM2ZOmQ0RRUtOkZHER30kygh9lFWO0QFDpZ9yLnQ0iT7pQKhkkfOclgkx56yYlcPm0M6v3x8+e397N942e+29Q7ery+ty8X69nq/n6/Fasz16Pp7P18tiGIYhAACAQuZS1AEAAIB/BpIOAADgFCQdAADAKUg6AACAU5B0AAAApyDpAAAATkHSAQAAnIKkAwAAOAVJBwAAcAqSDqCIHD58WJ06dZK3t7csFouWL19uav8nTpyQxWJRVFSUqf2WZO3atVO7du2KOgzgH4ukA/9oR48e1X/+8x/VqVNHHh4eslqtatWqlWbNmqU///yzUK8dHh6uvXv36tVXX9WiRYt0xx13FOr1nKl///6yWCyyWq3X/DoePnxYFotFFotFb775Zr77P3XqlCIjIxUXF2dCtACcxbWoAwCKytdff61///vfcnd3V79+/dSoUSOlp6dr8+bNGj16tPbv36933323UK79559/KiYmRi+99JIiIiIK5RqBgYH6888/VbZs2ULp/0ZcXV115coVrVy5Ur169bI7tnjxYnl4eCg1NfWm+j516pQmTpyoWrVqqWnTpnk+b82aNTd1PQDmIOnAP9Lx48fVu3dvBQYGat26dapWrZrt2NChQ3XkyBF9/fXXhXb933//XZLk4+NTaNewWCzy8PAotP5vxN3dXa1atdInn3ySK+lYsmSJunbtqi+++MIpsVy5ckXlypWTm5ubU64H4Noor+AfaerUqbp06ZI++OADu4QjR7169fTcc8/ZPmdmZmry5MmqW7eu3N3dVatWLb344otKS0uzO69WrVp64IEHtHnzZrVo0UIeHh6qU6eOPvroI1ubyMhIBQYGSpJGjx4ti8WiWrVqSbpalsj5+19FRkbKYrHY7YuOjtY999wjHx8fVahQQUFBQXrxxRdtx683p2PdunVq3bq1ypcvLx8fH3Xv3l0HDhy45vWOHDmi/v37y8fHR97e3howYICuXLly/S/s3/Tp00fffvut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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Confusion Matrix:\n", + "[[ 5 20]\n", + " [ 0 2666]]\n", + "\n", + "Precision: 0.9926\n", + "Recall: 1.0000\n", + "F1-score: 0.9963\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## CV scores" + ], + "metadata": { + "id": "0jtLBuvnAeND" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.metrics import balanced_accuracy_score, roc_auc_score, average_precision_score\n", + "import numpy as np\n", + "\n", + "# Define the number of folds\n", + "n_splits = 5\n", + "\n", + "# Create a StratifiedKFold object\n", + "skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n", + "\n", + "# Initialize lists to store the scores\n", + "balanced_accuracy_scores = []\n", + "roc_auc_scores = []\n", + "average_precision_scores = []\n", + "\n", + "# Perform cross-validation manuall\n", + "for fold, (train_index, val_index) in enumerate(skf.split(X, y), 1):\n", + " X_train, X_val = X[train_index], X[val_index]\n", + " y_train, y_val = y[train_index], y[val_index]\n", + "\n", + " # Fit the pipeline\n", + " pipeline.fit(X_train, y_train)\n", + "\n", + " # Make predictions\n", + " y_pred = pipeline.predict(X_val)\n", + " y_pred_proba = pipeline.predict_proba(X_val)[:, 1]\n", + "\n", + " # Calculate scores\n", + " balanced_accuracy_scores.append(balanced_accuracy_score(y_val, y_pred))\n", + " roc_auc_scores.append(roc_auc_score(y_val, y_pred_proba))\n", + " average_precision_scores.append(average_precision_score(y_val, y_pred_proba))\n", + "\n", + " print(f\"Fold {fold}:\")\n", + " print(f\" Balanced Accuracy: {balanced_accuracy_scores[-1]:.4f}\")\n", + " print(f\" ROC AUC: {roc_auc_scores[-1]:.4f}\")\n", + " print(f\" Average Precision: {average_precision_scores[-1]:.4f}\")\n", + "\n", + "# Print the overall results\n", + "print(\"\\nCross-validation results:\")\n", + "print(f\"Balanced Accuracy: {np.mean(balanced_accuracy_scores):.4f} (+/- {np.std(balanced_accuracy_scores) * 2:.4f})\")\n", + "print(f\"ROC AUC: {np.mean(roc_auc_scores):.4f} (+/- {np.std(roc_auc_scores) * 2:.4f})\")\n", + "print(f\"Average Precision: {np.mean(average_precision_scores):.4f} (+/- {np.std(average_precision_scores) * 2:.4f})\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cZqWaRDr61mL", + "outputId": "d77b060e-d380-4978-c920-97d260f2cf64" + }, + "execution_count": 38, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fold 1:\n", + " Balanced Accuracy: 0.7493\n", + " ROC AUC: 0.9968\n", + " Average Precision: 1.0000\n", + "Fold 2:\n", + " Balanced Accuracy: 0.7605\n", + " ROC AUC: 0.9944\n", + " Average Precision: 0.9999\n", + "Fold 3:\n", + " Balanced Accuracy: 0.7172\n", + " ROC AUC: 0.9915\n", + " Average Precision: 0.9999\n", + "Fold 4:\n", + " Balanced Accuracy: 0.7170\n", + " ROC AUC: 0.9932\n", + " Average Precision: 0.9999\n", + "Fold 5:\n", + " Balanced Accuracy: 0.6953\n", + " ROC AUC: 0.9957\n", + " Average Precision: 1.0000\n", + "\n", + "Cross-validation results:\n", + "Balanced Accuracy: 0.7278 (+/- 0.0475)\n", + "ROC AUC: 0.9943 (+/- 0.0037)\n", + "Average Precision: 0.9999 (+/- 0.0000)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Grid search optimization" + ], + "metadata": { + "id": "_XUIxpRdKzf9" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "import itertools\n", + "\n", + "# Define parameter grid\n", + "param_grid = {\n", + " 'n_estimators': [100, 200, 300],\n", + " 'max_depth': [None, 10, 20, 30],\n", + " 'min_samples_split': [2, 5, 10],\n", + " 'min_samples_leaf': [1, 2, 4]\n", + "}\n", + "\n", + "# Generate all combinations of parameters\n", + "param_combinations = list(itertools.product(*param_grid.values()))\n", + "\n", + "best_score = -float('inf')\n", + "best_params = None\n", + "\n", + "# Manually perform grid search\n", + "for params in param_combinations:\n", + " # Create a new pipeline with current parameters\n", + " current_pipeline = Pipeline([\n", + " ('smote', SMOTE(sampling_strategy=0.35, random_state=42)),\n", + " ('undersampler', RandomUnderSampler(sampling_strategy=1.0, random_state=42)),\n", + " ('classifier', RandomForestClassifier(\n", + " n_estimators=params[0],\n", + " max_depth=params[1],\n", + " min_samples_split=params[2],\n", + " min_samples_leaf=params[3],\n", + " class_weight='balanced',\n", + " random_state=42\n", + " ))\n", + " ])\n", + "\n", + " # Perform cross-validation\n", + " scores = cross_val_score(current_pipeline, X, y, cv=5, scoring='balanced_accuracy')\n", + " mean_score = scores.mean()\n", + "\n", + " # Update best score and parameters if current is better\n", + " if mean_score > best_score:\n", + " best_score = mean_score\n", + " best_params = params\n", + "\n", + " print(f\"Parameters: {params}, Score: {mean_score}\")\n", + "\n", + "print(f\"\\nBest parameters: {best_params}\")\n", + "print(f\"Best cross-validation score: {best_score}\")\n", + "\n", + "# Create the best pipeline\n", + "best_pipeline = Pipeline([\n", + " ('smote', SMOTE(sampling_strategy=0.35, random_state=42)),\n", + " ('undersampler', RandomUnderSampler(sampling_strategy=1.0, random_state=42)),\n", + " ('classifier', RandomForestClassifier(\n", + " n_estimators=best_params[0],\n", + " max_depth=best_params[1],\n", + " min_samples_split=best_params[2],\n", + " min_samples_leaf=best_params[3],\n", + " class_weight='balanced',\n", + " random_state=42\n", + " ))\n", + "])\n", + "\n", + "# Fit the best pipeline\n", + "best_pipeline.fit(X, y)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "yIeeLfSlBXI7", + "outputId": "ee84da33-1d68-4cc3-8f82-82c20b4c2846" + }, + "execution_count": 61, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Parameters: (100, None, 2, 1), Score: 0.6601958996148235\n", + "Parameters: (100, None, 2, 2), Score: 0.6575723238043774\n", + "Parameters: (100, None, 2, 4), Score: 0.6832200924981155\n", + "Parameters: (100, None, 5, 1), Score: 0.6550882823515521\n", + "Parameters: (100, None, 5, 2), Score: 0.6617703512425128\n", + "Parameters: (100, None, 5, 4), Score: 0.6832200924981155\n", + "Parameters: (100, None, 10, 1), Score: 0.6531768364259575\n", + "Parameters: (100, None, 10, 2), Score: 0.6652185568886595\n", + "Parameters: (100, None, 10, 4), Score: 0.6606836474980943\n", + "Parameters: (100, 10, 2, 1), Score: 0.7538128573575538\n", + "Parameters: (100, 10, 2, 2), Score: 0.7490530042380288\n", + "Parameters: (100, 10, 2, 4), Score: 0.7528384007866634\n", + "Parameters: (100, 10, 5, 1), Score: 0.7531383491639173\n", + "Parameters: (100, 10, 5, 2), Score: 0.7575612641582747\n", + "Parameters: (100, 10, 5, 4), Score: 0.7528384007866634\n", + "Parameters: (100, 10, 10, 1), Score: 0.7454542837406529\n", + "Parameters: (100, 10, 10, 2), Score: 0.7450421584057931\n", + "Parameters: (100, 10, 10, 4), Score: 0.7454544241724976\n", + "Parameters: (100, 20, 2, 1), Score: 0.667890060811074\n", + "Parameters: (100, 20, 2, 2), Score: 0.6709738726297466\n", + "Parameters: (100, 20, 2, 4), Score: 0.6855542931725662\n", + "Parameters: (100, 20, 5, 1), Score: 0.6718902772293134\n", + "Parameters: (100, 20, 5, 2), Score: 0.6761462302501122\n", + "Parameters: (100, 20, 5, 4), Score: 0.6855542931725662\n", + "Parameters: (100, 20, 10, 1), Score: 0.6663908946953685\n", + "Parameters: (100, 20, 10, 2), Score: 0.6653415739080288\n", + "Parameters: (100, 20, 10, 4), Score: 0.6765587768805064\n", + "Parameters: (100, 30, 2, 1), Score: 0.659548594346173\n", + "Parameters: (100, 30, 2, 2), Score: 0.6622950046145905\n", + "Parameters: (100, 30, 2, 4), Score: 0.6784974819038248\n", + "Parameters: (100, 30, 5, 1), Score: 0.6547135399737714\n", + "Parameters: (100, 30, 5, 2), Score: 0.6574599783285577\n", + "Parameters: (100, 30, 5, 4), Score: 0.6784974819038248\n", + "Parameters: (100, 30, 10, 1), Score: 0.6532142895989589\n", + "Parameters: (100, 30, 10, 2), Score: 0.6739245014401413\n", + "Parameters: (100, 30, 10, 4), Score: 0.665106450146976\n", + "Parameters: (200, None, 2, 1), Score: 0.6643938427938523\n", + "Parameters: (200, None, 2, 2), Score: 0.6576473705822248\n", + "Parameters: (200, None, 2, 4), Score: 0.6868933120891442\n", + "Parameters: (200, None, 5, 1), Score: 0.6553131418214051\n", + "Parameters: (200, None, 5, 2), Score: 0.6623325701330676\n", + "Parameters: (200, None, 5, 4), Score: 0.6868933120891442\n", + "Parameters: (200, None, 10, 1), Score: 0.6578994329770638\n", + "Parameters: (200, None, 10, 2), Score: 0.6652935615369535\n", + "Parameters: (200, None, 10, 4), Score: 0.6698392267301753\n", + "Parameters: (200, 10, 2, 1), Score: 0.745267074048384\n", + "Parameters: (200, 10, 2, 2), Score: 0.7449298971890804\n", + "Parameters: (200, 10, 2, 4), Score: 0.7447048832441983\n", + "Parameters: (200, 10, 5, 1), Score: 0.7492776671032991\n", + "Parameters: (200, 10, 5, 2), Score: 0.74897785915789\n", + "Parameters: (200, 10, 5, 4), Score: 0.7447048832441983\n", + "Parameters: (200, 10, 10, 1), Score: 0.7457916712477236\n", + "Parameters: (200, 10, 10, 2), Score: 0.7454544241724976\n", + "Parameters: (200, 10, 10, 4), Score: 0.7451547004861954\n", + "Parameters: (200, 20, 2, 1), Score: 0.6638045192806029\n", + "Parameters: (200, 20, 2, 2), Score: 0.6673279261796262\n", + "Parameters: (200, 20, 2, 4), Score: 0.6721734274046259\n", + "Parameters: (200, 20, 5, 1), Score: 0.6592693009399793\n", + "Parameters: (200, 20, 5, 2), Score: 0.6672631436929786\n", + "Parameters: (200, 20, 5, 4), Score: 0.6721734274046259\n", + "Parameters: (200, 20, 10, 1), Score: 0.6754715254518933\n", + "Parameters: (200, 20, 10, 2), Score: 0.6794446232042534\n", + "Parameters: (200, 20, 10, 4), Score: 0.6768585286531775\n", + "Parameters: (200, 30, 2, 1), Score: 0.6599233788535073\n", + "Parameters: (200, 30, 2, 2), Score: 0.6574974595879279\n", + "Parameters: (200, 30, 2, 4), Score: 0.6783100896501577\n", + "Parameters: (200, 30, 5, 1), Score: 0.6550133198328116\n", + "Parameters: (200, 30, 5, 2), Score: 0.6624449717816251\n", + "Parameters: (200, 30, 5, 4), Score: 0.6783100896501577\n", + "Parameters: (200, 30, 10, 1), Score: 0.6581617737062869\n", + "Parameters: (200, 30, 10, 2), Score: 0.6695289298026146\n", + "Parameters: (200, 30, 10, 4), Score: 0.6699142032921004\n", + "Parameters: (300, None, 2, 1), Score: 0.6602333949173783\n", + "Parameters: (300, None, 2, 2), Score: 0.6577598143603358\n", + "Parameters: (300, None, 2, 4), Score: 0.6747867810534257\n", + "Parameters: (300, None, 5, 1), Score: 0.6598858835509525\n", + "Parameters: (300, None, 5, 2), Score: 0.662444971781625\n", + "Parameters: (300, None, 5, 4), Score: 0.6747867810534257\n", + "Parameters: (300, None, 10, 1), Score: 0.6583491800031385\n", + "Parameters: (300, None, 10, 2), Score: 0.6609831745798139\n", + "Parameters: (300, None, 10, 4), Score: 0.6698495331509285\n", + "Parameters: (300, 10, 2, 1), Score: 0.7449297427140511\n", + "Parameters: (300, 10, 2, 2), Score: 0.7497272877407137\n", + "Parameters: (300, 10, 2, 4), Score: 0.7446298083799818\n", + "Parameters: (300, 10, 5, 1), Score: 0.7494274517089357\n", + "Parameters: (300, 10, 5, 2), Score: 0.7490527514607083\n", + "Parameters: (300, 10, 5, 4), Score: 0.7446298083799818\n", + "Parameters: (300, 10, 10, 1), Score: 0.7452669336165393\n", + "Parameters: (300, 10, 10, 2), Score: 0.7453419242216488\n", + "Parameters: (300, 10, 10, 4), Score: 0.7447797474606476\n", + "Parameters: (300, 20, 2, 1), Score: 0.6591841443459611\n", + "Parameters: (300, 20, 2, 2), Score: 0.6669530854995541\n", + "Parameters: (300, 20, 2, 4), Score: 0.6768960941716546\n", + "Parameters: (300, 20, 5, 1), Score: 0.6676651451684832\n", + "Parameters: (300, 20, 5, 2), Score: 0.6758463520887806\n", + "Parameters: (300, 20, 5, 4), Score: 0.6768960941716546\n", + "Parameters: (300, 20, 10, 1), Score: 0.6711509725058449\n", + "Parameters: (300, 20, 10, 2), Score: 0.6749843392960013\n", + "Parameters: (300, 20, 10, 4), Score: 0.6810939530915764\n", + "Parameters: (300, 30, 2, 1), Score: 0.6600357805020648\n", + "Parameters: (300, 30, 2, 2), Score: 0.6577223471441499\n", + "Parameters: (300, 30, 2, 4), Score: 0.6746743653616838\n", + "Parameters: (300, 30, 5, 1), Score: 0.6596235287785447\n", + "Parameters: (300, 30, 5, 2), Score: 0.662145135749847\n", + "Parameters: (300, 30, 5, 4), Score: 0.6746743653616838\n", + "Parameters: (300, 30, 10, 1), Score: 0.6583491800031385\n", + "Parameters: (300, 30, 10, 2), Score: 0.660870730801703\n", + "Parameters: (300, 30, 10, 4), Score: 0.6699244816264847\n", + "\n", + "Best parameters: (100, 10, 5, 2)\n", + "Best cross-validation score: 0.7575612641582747\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Pipeline(steps=[('smote', SMOTE(random_state=42, sampling_strategy=0.35)),\n", + " ('undersampler',\n", + " RandomUnderSampler(random_state=42, sampling_strategy=1.0)),\n", + " ('classifier',\n", + " RandomForestClassifier(class_weight='balanced', max_depth=10,\n", + " min_samples_leaf=2, min_samples_split=5,\n", + " random_state=42))])" + ], + "text/html": [ + "
Pipeline(steps=[('smote', SMOTE(random_state=42, sampling_strategy=0.35)),\n",
+              "                ('undersampler',\n",
+              "                 RandomUnderSampler(random_state=42, sampling_strategy=1.0)),\n",
+              "                ('classifier',\n",
+              "                 RandomForestClassifier(class_weight='balanced', max_depth=10,\n",
+              "                                        min_samples_leaf=2, min_samples_split=5,\n",
+              "                                        random_state=42))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 61 + } + ] + }, + { + "cell_type": "code", + "source": [ + "\"\"\"\n", + "Pipeline(steps=[('smote', SMOTE(random_state=42, sampling_strategy=0.35)),\n", + " ('undersampler',\n", + " RandomUnderSampler(random_state=42, sampling_strategy=1.0)),\n", + " ('classifier',\n", + " RandomForestClassifier(class_weight='balanced', max_depth=10,\n", + " min_samples_leaf=2, min_samples_split=5,\n", + " random_state=42))])\n", + "\n", + "SMOTE\n", + "SMOTE(random_state=42, sampling_strategy=0.35)\n", + "\n", + "RandomUnderSampler\n", + "RandomUnderSampler(random_state=42, sampling_strategy=1.0)\n", + "\n", + "RandomForestClassifier\n", + "RandomForestClassifier(class_weight='balanced', max_depth=10,\n", + " min_samples_leaf=2, min_samples_split=5,\n", + " random_state=42)\n", + "\"\"\"\n", + "\n", + "from imblearn.pipeline import make_pipeline\n", + "from imblearn.over_sampling import SMOTE\n", + "from imblearn.under_sampling import RandomUnderSampler\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import classification_report, balanced_accuracy_score\n", + "\n", + "# Assuming you have your features X and target y already defined\n", + "# Encode labels\n", + "le = LabelEncoder()\n", + "df['label_encoded'] = le.fit_transform(df['label'])\n", + "\n", + "# Split data\n", + "X = np.array(df['message_vector'].tolist())\n", + "y = df['label_encoded'].values\n", + "\n", + "\n", + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Create the pipeline using make_pipeline\n", + "pipeline = make_pipeline(\n", + " SMOTE(random_state=42, sampling_strategy=0.35),\n", + " RandomUnderSampler(random_state=42, sampling_strategy=1.0),\n", + " RandomForestClassifier(\n", + " class_weight='balanced',\n", + " max_depth=10,\n", + " min_samples_leaf=2,\n", + " min_samples_split=5,\n", + " random_state=42\n", + " )\n", + ")\n", + "\n", + "# Fit the pipeline\n", + "pipeline.fit(X_train, y_train)\n", + "\n", + "# Use the fitted pipeline to make predictions\n", + "y_pred = pipeline.predict(X_test)\n", + "\n", + "# Evaluate the model\n", + "print(classification_report(y_test, y_pred))\n", + "print(f\"Balanced Accuracy: {balanced_accuracy_score(y_test, y_pred)}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "saqEW4G2HbI3", + "outputId": "d149844d-0cf7-4e33-89d9-cadf77890678" + }, + "execution_count": 90, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.78 0.72 0.75 25\n", + " 1 1.00 1.00 1.00 2666\n", + "\n", + " accuracy 1.00 2691\n", + " macro avg 0.89 0.86 0.87 2691\n", + "weighted avg 1.00 1.00 1.00 2691\n", + "\n", + "Balanced Accuracy: 0.8590622655663915\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Make predictions\n", + "y_pred = pipeline.predict(X_test)\n", + "\n", + "# Create the confusion matrix\n", + "cm = confusion_matrix(y_test, y_pred)\n", + "\n", + "# Create a ConfusionMatrixDisplay object\n", + "disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['good', 'bad'])\n", + "\n", + "# Plot the confusion matrix\n", + "plt.figure(figsize=(10, 7))\n", + "disp.plot(cmap='Blues', values_format='d')\n", + "plt.title('Confusion Matrix')\n", + "plt.show()\n", + "\n", + "# Print the confusion matrix\n", + "print(\"Confusion Matrix:\")\n", + "print(cm)\n", + "\n", + "# Calculate and print additional metrics\n", + "tn, fp, fn, tp = cm.ravel()\n", + "precision = tp / (tp + fp)\n", + "recall = tp / (tp + fn)\n", + "f1_score = 2 * (precision * recall) / (precision + recall)\n", + "\n", + "print(f\"\\nPrecision: {precision:.4f}\")\n", + "print(f\"Recall: {recall:.4f}\")\n", + "print(f\"F1-score: {f1_score:.4f}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 617 + }, + "id": "raf1OKv4_E23", + "outputId": "6f7ab778-99af-401d-a8e0-2d8bff230902" + }, + "execution_count": 91, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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8xxrkSYdly5dUp8+fVS+fHlVrVpVM2fOVLt27WxljwsXLqhv376qWLGiypUrpy5duujw4cN2fXz55Zdq2LCh3N3dVbNmTU2fPt3u+NmzZ9WtWzd5enqqVq1aioqKctbtoYDuvqOWvtu4V6fOXpRhGNq065COJpxV+5YNijo0oMDSMzK19Nud6vNQaKkeTr/VFHiU4ybKM99995369eunhg0bqkmTJoqMjFRCQoJiY2MlSUlJSfroo480Y8YM/e1vf1Pz5s21YMECbd26Vdu2bZMkrVmzRvv379cnn3yipk2bqkuXLpo8ebLeffddpaenS5Lmz5+vWrVqafr06QoODtbQoUP16KOPaubMmXmOtUiTjhEjRmjLli1asWKFoqOjtWnTJv3000+24/369dOuXbu0YsUKxcTEyDAMPfDAA8rIyJAkxcbGqmfPnurVq5f27t2riIgIjRs3zm64p1+/fjp58qR++OEHffHFF5o7d67Onj3r7FvFTfjXqEcVVMtPjR4cJ997h+kfL87T1NH/0L3N6hZ1aECBrd7ws5JS/lDvB1sWdSgwk8WkTVJycrLdlpaWlqcQkpKSJEmVKlWSdPV3ZUZGhjp27Ghr06BBA9WoUUMxMTGSpJiYGDVu3Fi+vr62NmFhYUpOTta+fftsbf7cR06bnD7yosgmkl66dEkLFy7UkiVL1KFDB0nSggUL5O/vL0k6fPiwVqxYoS1btujee++VJEVFRSkgIEDLly/XP/7xD82YMUMdOnTQuHHjJEn169fX/v379dZbb6lfv346dOiQvv32W+3YsUMtWrSQJH300UcKDg52GFtaWprd/9zk5GTT7x839v7Sjdr1ywktmf60AvwqaevuI3rprc/ld7u32t3NaAdKtk9WbFXH0BBVvd2nqENBMRUQEGD3ecKECYqIiHB4TnZ2toYNG6ZWrVqpUaNGkqTExES5ubnJx8fHrq2vr68SExNtbf6ccOQczznmqE1ycrL++OMPeXp63vCeiizpOHbsmDIyMnT33Xfb9nl7eysoKEiSdODAAbm6uqply///V8Btt92moKAgHThwwName/fudv22atVKb7/9trKysmx9NG/e3Ha8QYMGub7wfzVlyhRNnDixoLeIAvgjNV2vzV2pxVMHqtN9V//iNKxXTXsP/a53PllP0oESLeH0eW3YEa/FUwcVdSgwmZmr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AADg5l2+fFlNmjTRu+++e902nTt31unTp23bp59+ane8T58+2rdvn6Kjo7Vq1Spt3LhRTz/9tO14cnKyOnXqpMDAQMXGxuqtt95SRESE3n///XzFmu/yyqJFi/T++++rQ4cOGjx4sG1/kyZNdPDgwfx2BwBAqVEU5ZUuXbqoS5cuDtu4u7vLz8/vmscOHDig7777Tjt37tRdd90lSZozZ44eeOABTZs2Tf7+/oqKilJ6ero+/vhjubm5qWHDhoqLi9OMGTPskpMbyfdIx++//666devm2p+dna2MjIz8dgcAQKmRM5G0oJvZNmzYoCpVqigoKEjPPvuszp07ZzsWExMjHx8fW8IhSR07dpSLi4u2b99ua9OmTRu7CkdYWJji4+N14cKFPMeR76QjJCREmzZtyrX/iy++0J133pnf7gAAwDUkJyfbbWlpaTfVT+fOnbVo0SKtW7dO//rXv/Tjjz+qS5cutkdcJCYmqkqVKnbnuLq6qlKlSkpMTLS18fX1tWuT8zmnTV7ku7wyfvx4hYeH6/fff1d2dra++uorxcfHa9GiRVq1alV+uwMAoNSw/G8raB+SFBAQYLd/woQJioiIyHd/vXr1sv25cePGuuOOO1SnTh1t2LBBHTp0KECk+ZfvpKN79+5auXKlJk2apPLly2v8+PFq1qyZVq5cqfvvv78wYgQAoEQw8zHoJ0+elNVqte13d3cvUL85ateurcqVK+vIkSPq0KGD/Pz8dPbsWbs2mZmZOn/+vG0eiJ+fn86cOWPXJufz9eaKXMtNPaejdevWio6OvplTAQBAHlitVrukwyy//fabzp07p6pVq0qSQkNDdfHiRcXGxqp58+aSpPXr1ys7O1stW7a0tXnllVeUkZGhsmXLSpKio6MVFBSkihUr5vnaN/2W2V27dmnx4sVavHixYmNjb7YbAABKjZxX2xd0y4+UlBTFxcUpLi5OknT8+HHFxcUpISFBKSkpGj16tLZt26YTJ05o3bp16t69u+rWrauwsDBJUnBwsDp37qxBgwZpx44d2rJli4YOHapevXrJ399fktS7d2+5ublpwIAB2rdvnz777DPNmjVLI0aMyFes+R7p+O233/T4449ry5Yt8vHxkSRdvHhR9957r/7973+revXq+e0SAIBSoSjeMrtr1y61b9/e9jknEQgPD9e8efP0888/a+HChbp48aL8/f3VqVMnTZ482a5cExUVpaFDh6pDhw5ycXHRI488otmzZ9uOe3t7a82aNRoyZIiaN2+uypUra/z48flaLitJFsMwjPyc0LlzZ128eFELFy5UUFCQJCk+Pl79+/eX1WrVd999l68ASoLk5GR5e3sr8b8XC2WoCygOSvPrtIHk5GT53uatpKSkQvk5nvN7ouf7m1XWs0KB+sr4I0VLn76v0GItSvke6fjxxx+1detWW8IhSUFBQZozZ45at25tanAAAJQ05O/Xl++kIyAg4JoPAcvKyrLVfgAAuBUVRXmlJMn3RNK33npLzz//vHbt2mXbt2vXLr344ouaNm2aqcEBAFCSFMVE0pIkTyMdFStWtMu8Ll++rJYtW8rV9erpmZmZcnV11VNPPaWHH364UAIFAAAlW56SjrfffruQwwAAoOSjvOJYnpKO8PDwwo4DAIASz8zHoJdGN/VE0hypqalKT0+321falvcAAABz5DvpuHz5ssaMGaOlS5favRo3R85b6wAAuNWY8Wr6wni1fXGR79UrL730ktavX6958+bJ3d1dH374oSZOnCh/f38tWrSoMGIEAKBEsFjM2UqrfI90rFy5UosWLVK7du3Uv39/tW7dWnXr1lVgYKCioqLUp0+fwogTAACUcPke6Th//rxq164t6er8jfPnz0uS7rvvPm3cuNHc6AAAKEFyVq8UdCut8p101K5dW8ePH5ckNWjQQEuXLpV0dQQk5wVwAADciiivOJbvpKN///7as2ePJGns2LF699135eHhoeHDh2v06NGmBwgAAEqHfM/pGD58uO3PHTt21MGDBxUbG6u6devqjjvuMDU4AABKElavOFag53RIUmBgoAIDA82IBQCAEs2M8kgpzjnylnTMnj07zx2+8MILNx0MAAAlGY9BdyxPScfMmTPz1JnFYiHpAAAA15SnpCNntcqtrrQvZcKtrWKLoUUdAlBojKz0GzcygYtuYoXGNfoorQo8pwMAAFxFecWx0pxQAQCAYoSRDgAATGKxSC6sXrkukg4AAEziYkLSUdDzizPKKwAAwCluKunYtGmTnnjiCYWGhur333+XJC1evFibN282NTgAAEoSXvjmWL6Tji+//FJhYWHy9PTU7t27lZaWJklKSkrSG2+8YXqAAACUFDnllYJupVW+k47XXntN8+fP1wcffKCyZcva9rdq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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Confusion Matrix:\n", + "[[ 18 7]\n", + " [ 5 2661]]\n", + "\n", + "Precision: 0.9974\n", + "Recall: 0.9981\n", + "F1-score: 0.9978\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.metrics import balanced_accuracy_score, roc_auc_score, average_precision_score\n", + "import numpy as np\n", + "\n", + "# Define the number of folds\n", + "n_splits = 5\n", + "\n", + "# Create a StratifiedKFold object\n", + "skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n", + "\n", + "# Initialize lists to store the scores\n", + "balanced_accuracy_scores = []\n", + "roc_auc_scores = []\n", + "average_precision_scores = []\n", + "\n", + "# Perform cross-validation manually\n", + "for fold, (train_index, val_index) in enumerate(skf.split(X, y), 1):\n", + " X_train, X_val = X[train_index], X[val_index]\n", + " y_train, y_val = y[train_index], y[val_index]\n", + "\n", + " # Fit the pipeline\n", + " pipeline.fit(X_train, y_train)\n", + "\n", + " # Make predictions\n", + " y_pred = pipeline.predict(X_val)\n", + " y_pred_proba = pipeline.predict_proba(X_val)[:, 1]\n", + "\n", + " # Calculate scores\n", + " balanced_accuracy_scores.append(balanced_accuracy_score(y_val, y_pred))\n", + " roc_auc_scores.append(roc_auc_score(y_val, y_pred_proba))\n", + " average_precision_scores.append(average_precision_score(y_val, y_pred_proba))\n", + "\n", + " print(f\"Fold {fold}:\")\n", + " print(f\" Balanced Accuracy: {balanced_accuracy_scores[-1]:.4f}\")\n", + " print(f\" ROC AUC: {roc_auc_scores[-1]:.4f}\")\n", + " print(f\" Average Precision: {average_precision_scores[-1]:.4f}\")\n", + "\n", + "# Print the overall results\n", + "print(\"\\nCross-validation results:\")\n", + "print(f\"Balanced Accuracy: {np.mean(balanced_accuracy_scores):.4f} (+/- {np.std(balanced_accuracy_scores) * 2:.4f})\")\n", + "print(f\"ROC AUC: {np.mean(roc_auc_scores):.4f} (+/- {np.std(roc_auc_scores) * 2:.4f})\")\n", + "print(f\"Average Precision: {np.mean(average_precision_scores):.4f} (+/- {np.std(average_precision_scores) * 2:.4f})\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WAJiYO5dK7eL", + "outputId": "21d68432-3b20-4fca-9775-bdf302ce8c0e" + }, + "execution_count": 63, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fold 1:\n", + " Balanced Accuracy: 0.9761\n", + " ROC AUC: 0.9994\n", + " Average Precision: 1.0000\n", + "Fold 2:\n", + " Balanced Accuracy: 0.8679\n", + " ROC AUC: 0.9965\n", + " Average Precision: 1.0000\n", + "Fold 3:\n", + " Balanced Accuracy: 0.8686\n", + " ROC AUC: 0.9984\n", + " Average Precision: 1.0000\n", + "Fold 4:\n", + " Balanced Accuracy: 0.8692\n", + " ROC AUC: 0.9970\n", + " Average Precision: 1.0000\n", + "Fold 5:\n", + " Balanced Accuracy: 0.9115\n", + " ROC AUC: 0.9979\n", + " Average Precision: 1.0000\n", + "\n", + "Cross-validation results:\n", + "Balanced Accuracy: 0.8987 (+/- 0.0843)\n", + "ROC AUC: 0.9979 (+/- 0.0020)\n", + "Average Precision: 1.0000 (+/- 0.0000)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "test_message_benign = random_good_message\n", + "test_message_bad = random_bad_message\n", + "\n", + "\n", + "from tokenizers import Tokenizer\n", + "import torch\n", + "import numpy as np\n", + "import polars as pl\n", + "import numpy as np\n", + "\n", + "# Load the custom tokenizer\n", + "tokenizer = Tokenizer.from_file(\"log_tokenizer.json\")\n", + "\n", + "# Define the device (assuming you're using PyTorch and want to specify CPU or GPU)\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "vector_good = vectorize_text(test_message_benign).flatten()\n", + "print(len(vector_good))\n", + "\n", + "\n", + "# Assuming 'vector' is your input\n", + "vector_good = np.array(vector_good)\n", + "vector_2d_good = vector_good.reshape(1, -1)\n", + "\n", + "# Class prediction\n", + "prediction = pipeline.predict(vector_2d_good)\n", + "print(\"Predicted class:\", prediction[0])\n", + "\n", + "# Probability prediction\n", + "probabilities = pipeline.predict_proba(vector_2d_good)\n", + "print(\"Class probabilities:\", probabilities[0])\n", + "\n", + "\n", + "vector_bad = vectorize_text(test_message_bad).flatten()\n", + "print(len(vector_bad))\n", + "\n", + "# Assuming 'vector' is your input\n", + "vector_bad = np.array(vector_bad)\n", + "vector_2d_bad = vector_bad.reshape(1, -1)\n", + "\n", + "# Class prediction\n", + "prediction = pipeline.predict(vector_2d_bad)\n", + "print(\"Predicted class:\", prediction[0])\n", + "\n", + "# Probability prediction\n", + "probabilities = pipeline.predict_proba(vector_2d_bad)\n", + "print(\"Class probabilities:\", probabilities[0])\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RbXSx4Go-6pd", + "outputId": "6fbe80e4-4818-42dd-d5b6-895cfbcce41f" + }, + "execution_count": 95, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "30000\n", + "Predicted class: 1\n", + "Class probabilities: [0. 1.]\n", + "30000\n", + "Predicted class: 0\n", + "Class probabilities: [0.68148054 0.31851946]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Tpot (Supervised)" + ], + "metadata": { + "id": "ZWRH59wKLaAX" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.metrics import make_scorer, confusion_matrix, classification_report\n", + "from imblearn.over_sampling import SMOTE\n", + "from imblearn.under_sampling import RandomUnderSampler\n", + "from imblearn.pipeline import Pipeline as ImbPipeline\n", + "from tpot import TPOTClassifier\n", + "from sklearn.decomposition import TruncatedSVD\n", + "\n", + "def print_step_info(X, y, step_name):\n", + " print(f\"\\n--- {step_name} ---\")\n", + " print(f\"X shape: {X.shape}\")\n", + " print(f\"y shape: {y.shape}\")\n", + " print(f\"Class distribution: {np.bincount(y)}\")\n", + "\n", + "def custom_scorer(y_true, y_pred):\n", + " cm = confusion_matrix(y_true, y_pred)\n", + " tn, fp, fn, tp = cm.ravel()\n", + " if (tp + fn) == 0 or (tn + fp) == 0:\n", + " return 0.0\n", + " recall = tp / (tp + fn + 1e-8)\n", + " specificity = tn / (tn + fp + 1e-8)\n", + " recall_weight = 1.0\n", + " specificity_weight = 2.0\n", + " score = (recall_weight * recall + specificity_weight * specificity) / (recall_weight + specificity_weight)\n", + " return score\n", + "\n", + "custom_scorer_obj = make_scorer(custom_scorer, greater_is_better=True)\n", + "\n", + "# Assuming you have your features X and target y already defined\n", + "# Encode labels\n", + "le = LabelEncoder()\n", + "df['label_encoded'] = le.fit_transform(df['label'])\n", + "\n", + "# Split data\n", + "X = np.array(df['message_vector'].tolist())\n", + "y = df['label_encoded'].values\n", + "\n", + "print_step_info(X, y, \"Original Data\")\n", + "\n", + "# Step 1: Preprocessing\n", + "imputer = SimpleImputer(strategy='mean')\n", + "scaler = StandardScaler()\n", + "pca = TruncatedSVD(n_components=100, random_state=42) # Reduce to 100 components\n", + "\n", + "X = imputer.fit_transform(X)\n", + "X = scaler.fit_transform(X)\n", + "X = pca.fit_transform(X)\n", + "\n", + "print_step_info(X, y, \"After Preprocessing\")\n", + "\n", + "# Step 2: Split the data\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n", + "print_step_info(X_train, y_train, \"Training Data\")\n", + "\n", + "# Step 3: Initial model on imbalanced data\n", + "initial_model = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42, n_jobs=-1)\n", + "initial_model.fit(X_train, y_train)\n", + "y_pred_initial = initial_model.predict(X_test)\n", + "print(\"\\nInitial Model Performance:\")\n", + "print(classification_report(y_test, y_pred_initial, zero_division=0))\n", + "print(\"Custom Score:\", custom_scorer(y_test, y_pred_initial))\n", + "\n", + "# Step 4: Resampling\n", + "smote = SMOTE(sampling_strategy=0.5, random_state=42)\n", + "rus = RandomUnderSampler(sampling_strategy=0.5, random_state=42)\n", + "X_resampled, y_resampled = rus.fit_resample(*smote.fit_resample(X_train, y_train))\n", + "print_step_info(X_resampled, y_resampled, \"Resampled Data\")\n", + "\n", + "# Step 5: Model on resampled data\n", + "resampled_model = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42, n_jobs=-1)\n", + "resampled_model.fit(X_resampled, y_resampled)\n", + "y_pred_resampled = resampled_model.predict(X_test)\n", + "print(\"\\nResampled Model Performance:\")\n", + "print(classification_report(y_test, y_pred_resampled, zero_division=0))\n", + "print(\"Custom Score:\", custom_scorer(y_test, y_pred_resampled))\n", + "\n", + "# Step 6: Create a new dataset with original minority samples and top predicted minority samples\n", + "y_pred_proba = resampled_model.predict_proba(X_train)[:, 1]\n", + "minority_indices = np.where(y_train == 0)[0]\n", + "predicted_minority_indices = np.argsort(y_pred_proba)[-len(minority_indices)*10:]\n", + "selected_indices = np.union1d(minority_indices, predicted_minority_indices)\n", + "\n", + "X_selected = X_train[selected_indices]\n", + "y_selected = y_train[selected_indices]\n", + "print_step_info(X_selected, y_selected, \"Selected Data for Final Model\")\n", + "\n", + "# Step 7: Final TPOT optimization\n", + "tpot_config = {\n", + " 'sklearn.ensemble.RandomForestClassifier': {\n", + " 'n_estimators': [100, 200, 500],\n", + " 'max_depth': [None, 5, 10, 20],\n", + " 'min_samples_split': [2, 5, 10],\n", + " 'min_samples_leaf': [1, 2, 4],\n", + " 'class_weight': ['balanced', 'balanced_subsample']\n", + " },\n", + " 'xgboost.XGBClassifier': {\n", + " 'n_estimators': [100, 200, 500],\n", + " 'max_depth': [3, 5, 7, 9],\n", + " 'learning_rate': [0.01, 0.1, 0.3],\n", + " 'subsample': [0.5, 0.7, 1.0],\n", + " 'scale_pos_weight': [1, 10, 100]\n", + " },\n", + " 'imblearn.ensemble.BalancedRandomForestClassifier': {\n", + " 'n_estimators': [100, 200, 500],\n", + " 'replacement': [True, False]\n", + " },\n", + " 'imblearn.ensemble.EasyEnsembleClassifier': {\n", + " 'n_estimators': [10, 20, 30, 50],\n", + " 'replacement': [True, False]\n", + " }\n", + "}\n", + "\n", + "tpot = TPOTClassifier(\n", + " config_dict=tpot_config,\n", + " generations=1,\n", + " population_size=20,\n", + " verbosity=2,\n", + " scoring=custom_scorer_obj,\n", + " random_state=42,\n", + " n_jobs=-1,\n", + " max_time_mins=60,\n", + " max_eval_time_mins=10\n", + ")\n", + "\n", + "try:\n", + " tpot.fit(X_selected, y_selected)\n", + " y_pred_tpot = tpot.predict(X_test)\n", + " print(\"\\nTPOT Model Performance:\")\n", + " print(classification_report(y_test, y_pred_tpot, zero_division=0))\n", + " print(\"Custom Score:\", custom_scorer(y_test, y_pred_tpot))\n", + " print(\"\\nConfusion Matrix:\")\n", + " print(confusion_matrix(y_test, y_pred_tpot))\n", + " tpot.export('tpot_best_pipeline.py')\n", + " print(\"\\nBest pipeline exported to 'tpot_best_pipeline.py'\")\n", + "except Exception as e:\n", + " print(f\"An error occurred during TPOT optimization: {str(e)}\")\n", + "\n", + "# Final evaluation\n", + "print(\"\\nFinal Evaluation:\")\n", + "print(\"Initial Model Custom Score:\", custom_scorer(y_test, y_pred_initial))\n", + "print(\"Resampled Model Custom Score:\", custom_scorer(y_test, y_pred_resampled))\n", + "if 'y_pred_tpot' in locals():\n", + " print(\"TPOT Model Custom Score:\", custom_scorer(y_test, y_pred_tpot))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "0ee9d77e31c343d2b226c9e1c370899a", + "cefbf3ec854e463eac3047d7f2366a9b", + "5d5a04539517439c9a47f725bbfca641", + "487df5716a1f42b9ad08a05300882448", + "f6f95cf2eb1f43cdbb1be5a1ffc19621", + "a8b2545d7d94490b8df9d8a63d7fde2d", + "18b7438e17ef4851aa9c8d0dfc52f2d5", + "939ebe26aaf74df78c81c255aefcc7e5", + "c5677148554a4e65b74ae9fc95ae4c37", + "328be8dce5cf4b2a8418e7693f1829c0", + "48d9d503aebd44578cb545fdb4b28776" + ] + }, + "id": "TnChV008alMz", + "outputId": "2e7242bb-41eb-4657-9aba-80bf41b9e218" + }, + "execution_count": 137, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "--- Original Data ---\n", + "X shape: (13455, 30000)\n", + "y shape: (13455,)\n", + "Class distribution: [ 114 13341]\n", + "\n", + "--- After Preprocessing ---\n", + "X shape: (13455, 100)\n", + "y shape: (13455,)\n", + "Class distribution: [ 114 13341]\n", + "\n", + "--- Training Data ---\n", + "X shape: (10764, 100)\n", + "y shape: (10764,)\n", + "Class distribution: [ 91 10673]\n", + "\n", + "Initial Model Performance:\n", + " precision recall f1-score support\n", + "\n", + " 0 0.00 0.00 0.00 23\n", + " 1 0.99 1.00 1.00 2668\n", + "\n", + " accuracy 0.99 2691\n", + " macro avg 0.50 0.50 0.50 2691\n", + "weighted avg 0.98 0.99 0.99 2691\n", + "\n", + "Custom Score: 0.333333333332084\n", + "\n", + "--- Resampled Data ---\n", + "X shape: (16008, 100)\n", + "y shape: (16008,)\n", + "Class distribution: [ 5336 10672]\n", + "\n", + "Resampled Model Performance:\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.22 0.36 23\n", + " 1 0.99 1.00 1.00 2668\n", + "\n", + " accuracy 0.99 2691\n", + " macro avg 1.00 0.61 0.68 2691\n", + "weighted avg 0.99 0.99 0.99 2691\n", + "\n", + "Custom Score: 0.47826086950095603\n", + "\n", + "--- Selected Data for Final Model ---\n", + "X shape: (1001, 100)\n", + "y shape: (1001,)\n", + "Class distribution: [ 91 910]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Optimization Progress: 0%| | 0/20 [00:00 0 else 0\n", + "recall = tp / (tp + fn) if (tp + fn) > 0 else 0\n", + "f1_score = 2 * (precision * recall) / (precision + recall) if (precision + recall) > 0 else 0\n", + "\n", + "print(f\"\\nPrecision: {precision:.4f}\")\n", + "print(f\"Recall: {recall:.4f}\")\n", + "print(f\"F1-score: {f1_score:.4f}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 617 + }, + "id": "top9wzRCdAKK", + "outputId": "decb8210-d1fc-4452-bc9c-ca6962caff0f" + }, + "execution_count": 105, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Confusion Matrix:\n", + "[[ 23 0]\n", + " [ 292 2376]]\n", + "\n", + "Precision: 1.0000\n", + "Recall: 0.8906\n", + "F1-score: 0.9421\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.metrics import balanced_accuracy_score, roc_auc_score, average_precision_score\n", + "import numpy as np\n", + "\n", + "# Define the number of folds\n", + "n_splits = 5\n", + "\n", + "# Create a StratifiedKFold object\n", + "skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n", + "\n", + "# Initialize lists to store the scores\n", + "balanced_accuracy_scores = []\n", + "roc_auc_scores = []\n", + "average_precision_scores = []\n", + "\n", + "# Perform cross-validation\n", + "for fold, (train_index, val_index) in enumerate(skf.split(X, y), 1):\n", + " X_val, y_val = X[val_index], y[val_index]\n", + "\n", + " # Make predictions using the existing TPOT model\n", + " y_pred = tpot.predict(X_val)\n", + " y_pred_proba = tpot.predict_proba(X_val)[:, 1]\n", + "\n", + " # Calculate scores\n", + " balanced_accuracy_scores.append(balanced_accuracy_score(y_val, y_pred))\n", + " roc_auc_scores.append(roc_auc_score(y_val, y_pred_proba))\n", + " average_precision_scores.append(average_precision_score(y_val, y_pred_proba))\n", + "\n", + " print(f\"Fold {fold}:\")\n", + " print(f\" Balanced Accuracy: {balanced_accuracy_scores[-1]:.4f}\")\n", + " print(f\" ROC AUC: {roc_auc_scores[-1]:.4f}\")\n", + " print(f\" Average Precision: {average_precision_scores[-1]:.4f}\")\n", + "\n", + "# Print the overall results\n", + "print(\"\\nCross-validation results:\")\n", + "print(f\"Balanced Accuracy: {np.mean(balanced_accuracy_scores):.4f} (+/- {np.std(balanced_accuracy_scores) * 2:.4f})\")\n", + "print(f\"ROC AUC: {np.mean(roc_auc_scores):.4f} (+/- {np.std(roc_auc_scores) * 2:.4f})\")\n", + "print(f\"Average Precision: {np.mean(average_precision_scores):.4f} (+/- {np.std(average_precision_scores) * 2:.4f})\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nmu5z7OVdQHA", + "outputId": "8193a942-2d4f-45b6-d1dc-e0dfed3e1d6c" + }, + "execution_count": 77, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fold 1:\n", + " Balanced Accuracy: 0.9507\n", + " ROC AUC: 0.9996\n", + " Average Precision: 1.0000\n", + "Fold 2:\n", + " Balanced Accuracy: 0.9472\n", + " ROC AUC: 0.9963\n", + " Average Precision: 1.0000\n", + "Fold 3:\n", + " Balanced Accuracy: 0.9400\n", + " ROC AUC: 0.9982\n", + " Average Precision: 1.0000\n", + "Fold 4:\n", + " Balanced Accuracy: 0.9457\n", + " ROC AUC: 1.0000\n", + " Average Precision: 1.0000\n", + "Fold 5:\n", + " Balanced Accuracy: 0.9468\n", + " ROC AUC: 0.9956\n", + " Average Precision: 1.0000\n", + "\n", + "Cross-validation results:\n", + "Balanced Accuracy: 0.9461 (+/- 0.0069)\n", + "ROC AUC: 0.9979 (+/- 0.0035)\n", + "Average Precision: 1.0000 (+/- 0.0000)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.decomposition import TruncatedSVD\n", + "\n", + "# Assume these are saved from the training process\n", + "saved_imputer = imputer # The SimpleImputer used in training\n", + "saved_scaler = scaler # The StandardScaler used in training\n", + "saved_pca = pca # The TruncatedSVD (PCA) used in training\n", + "\n", + "# Vectorize the messages\n", + "vector1 = vectorize_text(random_good_message)\n", + "vector2 = vectorize_text(random_bad_message)\n", + "\n", + "print(\"Shape of vector1:\", vector1.shape)\n", + "print(\"Shape of vector2:\", vector2.shape)\n", + "\n", + "# Combine the vectors\n", + "X_new = np.vstack((vector1, vector2))\n", + "\n", + "print(\"Shape of X_new before preprocessing:\", X_new.shape)\n", + "\n", + "# Apply the saved preprocessing steps\n", + "X_new = saved_imputer.transform(X_new)\n", + "print(\"Shape after imputation:\", X_new.shape)\n", + "\n", + "X_new = saved_scaler.transform(X_new)\n", + "print(\"Shape after scaling:\", X_new.shape)\n", + "\n", + "X_new = saved_pca.transform(X_new)\n", + "print(\"Shape after PCA:\", X_new.shape)\n", + "\n", + "# Ensure X_new has exactly 100 features\n", + "assert X_new.shape[1] == 100, f\"X_new has {X_new.shape[1]} features instead of 100\"\n", + "\n", + "# Make predictions using your TPOT model\n", + "predictions = tpot.predict(X_new)\n", + "probabilities = tpot.predict_proba(X_new)\n", + "\n", + "# Print results\n", + "for i, (pred, prob) in enumerate(zip(predictions, probabilities)):\n", + " print(f\"Message {i+1}:\")\n", + " print(f\"Predicted class: {pred}\")\n", + " print(f\"Class probabilities: {prob}\")\n", + " print()\n", + "\n", + "# Print the shape of X_new for final confirmation\n", + "print(f\"Final shape of X_new: {X_new.shape}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_AkVOj7ehjcQ", + "outputId": "b4cd08a9-38e0-4f33-c910-e2cb43610837" + }, + "execution_count": 138, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shape of vector1: (1, 30000)\n", + "Shape of vector2: (1, 30000)\n", + "Shape of X_new before preprocessing: (2, 30000)\n", + "Shape after imputation: (2, 30000)\n", + "Shape after scaling: (2, 30000)\n", + "Shape after PCA: (2, 100)\n", + "Message 1:\n", + "Predicted class: 1\n", + "Class probabilities: [0.186 0.814]\n", + "\n", + "Message 2:\n", + "Predicted class: 0\n", + "Class probabilities: [0.75 0.25]\n", + "\n", + "Final shape of X_new: (2, 100)\n" + ] + } + ] + }, { "cell_type": "code", "source": [ @@ -4430,42 +10515,23 @@ ], "metadata": { "colab": { - "base_uri": "https://localhost:8080/" + "base_uri": "https://localhost:8080/", + "height": 218 }, "id": "9qalTrUsqpVD", - "outputId": "ab89ae33-96cb-41ad-83ab-2d0f7d21a7fe" + "outputId": "38d1ca00-fa5d-4cc8-bbf1-a5386be19c6b" }, - "execution_count": 7, + "execution_count": 111, "outputs": [ { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "Top 10 Pipelines Across All Runs and Evaluations:\n", - "+------------------------+---------+\n", - "| Pipeline | Count |\n", - "+========================+=========+\n", - "| xgbclassifier | 44 |\n", - "+------------------------+---------+\n", - "| extratreesclassifier | 20 |\n", - "+------------------------+---------+\n", - "| bernoullinb | 13 |\n", - "+------------------------+---------+\n", - "| decisiontreeclassifier | 12 |\n", - "+------------------------+---------+\n", - "| gaussiannb | 7 |\n", - "+------------------------+---------+\n", - "| kneighborsclassifier | 7 |\n", - "+------------------------+---------+\n", - "| randomforestclassifier | 6 |\n", - "+------------------------+---------+\n", - "| mlpclassifier | 3 |\n", - "+------------------------+---------+\n", - "| sgdclassifier | 3 |\n", - "+------------------------+---------+\n", - "| multinomialnb | 1 |\n", - "+------------------------+---------+\n" + "output_type": "error", + "ename": "NameError", + "evalue": "name 'results_df' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;31m# Iterate through all runs and all evaluated pipelines\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mresults_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 17\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpipeline_str\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'pipelines_tested'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0msimple_pipeline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msimplify_pipeline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpipeline_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'results_df' is not defined" ] } ] @@ -4508,7 +10574,7 @@ "id": "SGH18PwBSdeE", "outputId": "6bb659aa-bdf4-49fc-ad4a-c9f8968ce3c5" }, - "execution_count": 5, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -4697,7 +10763,7 @@ "id": "iyExRJRjsDBO", "outputId": "dfaff146-db7c-47d5-bd93-535282346bea" }, - "execution_count": 24, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -4793,6 +10859,82 @@ } ] }, + { + "cell_type": "code", + "source": [ + "import joblib\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import f1_score\n", + "\n", + "# Find the best run (highest F1 score)\n", + "best_run_index = results_df['f1_score'].idxmax()\n", + "best_pipeline_str = results_df.loc[best_run_index, 'best_pipeline']\n", + "\n", + "# Re-fit the best pipeline on the entire dataset\n", + "X_train_full, X_test_full, y_train_full, y_test_full = train_test_split(X_pca, y_encoded, test_size=0.2, random_state=42, stratify=y_encoded)\n", + "best_model = tpot.fitted_pipeline_\n", + "\n", + "# Save the model using joblib\n", + "model_filename = 'best_tpot_nn_model.joblib'\n", + "joblib.dump(best_model, model_filename)\n", + "\n", + "print(f\"\\nBest model exported as joblib: {model_filename}\")\n", + "\n", + "# You can also save the best pipeline as a Python script\n", + "python_filename = 'best_tpot_nn_pipeline.py'\n", + "best_pipeline_script = tpot.export(python_filename)\n", + "\n", + "print(f\"Best pipeline saved as Python script: {python_filename}\")\n", + "\n", + "# Print the best pipeline\n", + "print(f\"\\nBest Pipeline:\\n{best_pipeline_str}\")\n", + "\n", + "# Verify the saved model\n", + "try:\n", + " loaded_model = joblib.load(model_filename)\n", + " y_pred = loaded_model.predict(X_test_full)\n", + " f1 = f1_score(y_test_full, y_pred, average='weighted')\n", + " print(f\"\\nLoaded model verified. F1 Score: {f1:.4f}\")\n", + "except Exception as e:\n", + " print(f\"\\nError verifying saved model: {str(e)}\")\n", + "\n", + "# Print information about how to use the saved model\n", + "print(\"\\nTo use the saved model in the future:\")\n", + "print(\"1. Load the model: loaded_model = joblib.load('best_tpot_nn_model.joblib')\")\n", + "print(\"2. Make predictions: predictions = loaded_model.predict(X)\")\n", + "print(\"Note: Make sure to preprocess your input data (X) the same way as during training.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tQ06A8TMgdKw", + "outputId": "8e9cbfe1-8098-437a-c184-9172d0284db7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Best model exported as joblib: best_tpot_nn_model.joblib\n", + "Best pipeline saved as Python script: best_tpot_nn_pipeline.py\n", + "\n", + "Best Pipeline:\n", + "Pipeline(steps=[('gaussiannb', GaussianNB())])\n", + "\n", + "Loaded model verified. F1 Score: 0.9988\n", + "\n", + "To use the saved model in the future:\n", + "1. Load the model: loaded_model = joblib.load('best_tpot_nn_model.joblib')\n", + "2. Make predictions: predictions = loaded_model.predict(X)\n", + "Note: Make sure to preprocess your input data (X) the same way as during training.\n" + ] + } + ] + }, { "cell_type": "code", "source": [ @@ -4907,7 +11049,7 @@ "id": "5m0mtcVZduol", "outputId": "1d8b8679-4cbc-4574-dc35-6e7ab8b3d1cd" }, - "execution_count": 25, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -5008,7 +11150,7 @@ "id": "3lBpziEae4sf", "outputId": "08837957-1ab6-4acb-ab65-b0f0fca2b56c" }, - "execution_count": 26, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -5189,7 +11331,7 @@ "id": "pDB9efndcv9g", "outputId": "922183ba-2287-40a7-8d73-32a476c0557f" }, - "execution_count": 27, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -5362,7 +11504,7 @@ "id": "VgKt6AU28-6f", "outputId": "ab7671a3-1229-42f5-807a-eec12327733a" }, - "execution_count": 28, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -5463,7 +11605,7 @@ "id": "SYRHdR4_YKXA", "outputId": "a25b02c4-ae41-4ef9-c701-a77d227b7ab9" }, - "execution_count": 29, + "execution_count": null, "outputs": [ { "output_type": "display_data",