From dc56870640bc73eb2d0bada8fb6eed4cb9f8ee34 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 14:53:04 -0700 Subject: [PATCH 01/16] update env --- environment.yaml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/environment.yaml b/environment.yaml index 3b9ebb5..1f7208c 100644 --- a/environment.yaml +++ b/environment.yaml @@ -14,7 +14,16 @@ dependencies: - pytest-cov - pytest-xdist - python - - openfe==1.12.0 - - openff-interchange-base != 0.5.1 # https://github.com/openforcefield/openff-interchange/issues/1450 + # - openfe==1.12.0 + + # tmp for dev build until openfe 1.13 is released + - gufe == 1.13.0 + - cinnabar >=0.6.0 + - kartograf ~=2.0 + - konnektor ~=0.5.0 + - openfe-analysis>=0.5.0 + - openmmforcefields >=0.15.1 # min needed for https://github.com/openmm/openmmforcefields/pull/414 + - openmmtools >=0.26 # fix to support membrane barostat: https://github.com/choderalab/openmmtools/pull/798 + - pip: - - git+https://github.com/OpenFreeEnergy/konnektor@v0.5.0 # use conda-forge v0.5.0 after openfe conda-forge release + - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v0.5.0 after openfe conda-forge release From dfa5791e0e796bcfed443e2225d541e1f8206f03 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 15:10:51 -0700 Subject: [PATCH 02/16] update env --- environment.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/environment.yaml b/environment.yaml index 1f7208c..a30a6ca 100644 --- a/environment.yaml +++ b/environment.yaml @@ -13,7 +13,7 @@ dependencies: - pytest - pytest-cov - pytest-xdist - - python + - python=3.13 # - openfe==1.12.0 # tmp for dev build until openfe 1.13 is released @@ -22,8 +22,9 @@ dependencies: - kartograf ~=2.0 - konnektor ~=0.5.0 - openfe-analysis>=0.5.0 + - lomap2>=3.2.1 - openmmforcefields >=0.15.1 # min needed for https://github.com/openmm/openmmforcefields/pull/414 - openmmtools >=0.26 # fix to support membrane barostat: https://github.com/choderalab/openmmtools/pull/798 - pip: - - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v0.5.0 after openfe conda-forge release + - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v1.13.0 after release From f605060907eaf35cbb1390702af089a151b2d08a Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 15:13:46 -0700 Subject: [PATCH 03/16] add plugcli --- environment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yaml b/environment.yaml index a30a6ca..fb409b9 100644 --- a/environment.yaml +++ b/environment.yaml @@ -25,6 +25,7 @@ dependencies: - lomap2>=3.2.1 - openmmforcefields >=0.15.1 # min needed for https://github.com/openmm/openmmforcefields/pull/414 - openmmtools >=0.26 # fix to support membrane barostat: https://github.com/choderalab/openmmtools/pull/798 + - plugcli - pip: - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v1.13.0 after release From cc889a4d124439c3c22abf28f180360e2388e98b Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 15:18:46 -0700 Subject: [PATCH 04/16] bump to use python 3.13 --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8517158..5d36ed1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -31,7 +31,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest"] - python-version: ["3.12"] + python-version: ["3.13"] steps: - uses: actions/checkout@v4 From d32b02ec6321055457e8c0447eead67f3384f45b Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Thu, 27 Aug 2026 15:14:43 -0500 Subject: [PATCH 05/16] add worker-based execution example notebook --- environment.yaml | 3 +- execution/alchemicalNetwork_mc1_small.json | 1 + execution/worker_based_execution.ipynb | 83 ++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 execution/alchemicalNetwork_mc1_small.json create mode 100644 execution/worker_based_execution.ipynb diff --git a/environment.yaml b/environment.yaml index fb409b9..c4e8326 100644 --- a/environment.yaml +++ b/environment.yaml @@ -15,6 +15,7 @@ dependencies: - pytest-xdist - python=3.13 # - openfe==1.12.0 + - exorcist # tmp for dev build until openfe 1.13 is released - gufe == 1.13.0 @@ -28,4 +29,4 @@ dependencies: - plugcli - pip: - - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v1.13.0 after release + - git+https://github.com/OpenFreeEnergy/openfe@epic/execution_improvements # use conda-forge v1.13.0 after release diff --git a/execution/alchemicalNetwork_mc1_small.json b/execution/alchemicalNetwork_mc1_small.json new file mode 100644 index 0000000..843bcc2 --- /dev/null +++ b/execution/alchemicalNetwork_mc1_small.json @@ -0,0 +1 @@ +[["SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab", {"atoms": [[6, 0, 0, true, 0, 0, {"PartialCharge": -0.15505882352941178}, 3], [8, 0, 0, false, 0, 0, {"PartialCharge": -0.7983588235294118}, 3], [16, 0, 0, true, 0, 0, {"PartialCharge": 0.028441176470588237}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.15005882352941177}, 3], [8, 0, -1, false, 0, 0, {"PartialCharge": -0.7983588235294118}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.09305882352941176}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.09905882352941177}, 3], [6, 0, 0, false, 0, 0, {"PartialCharge": 0.9317411764705882}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.03485882352941176}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.05565882352941176}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.10515882352941176}, 3], [6, 0, 0, true, 0, 0, {"PartialCharge": -0.052858823529411764}, 3], [17, 0, 0, false, 0, 0, {"PartialCharge": -0.09245882352941176}, 4], [1, 0, 0, false, 0, 0, {"PartialCharge": 0.11994117647058823}, 1], [1, 0, 0, false, 0, 0, {"PartialCharge": 0.11094117647058824}, 1], [1, 0, 0, false, 0, 0, {"PartialCharge": 0.11194117647058824}, 1], [1, 0, 0, false, 0, 0, {"PartialCharge": 0.13194117647058823}, 1]], "bonds": [[0, 3, 12, 0, {}], [0, 5, 12, 0, {}], [0, 14, 1, 0, {}], [1, 7, 2, 0, {}], [2, 9, 12, 0, {}], [2, 10, 12, 0, {}], [3, 6, 12, 0, {}], [3, 15, 1, 0, {}], [4, 7, 1, 0, {}], [5, 10, 12, 0, {}], [5, 13, 1, 0, {}], [6, 11, 12, 0, {}], [6, 16, 1, 0, {}], [7, 9, 1, 0, {}], [8, 9, 12, 0, {}], [8, 11, 12, 0, {}], [8, 12, 1, 0, {}], [10, 11, 12, 0, {}]], "conformer": ["\u0093NUMPY\u0001\u0000v\u0000{'descr': '\n\u00d7\u00a3p=\u00da\u00bf\u00a6\u009b\u00c4 \u00b0\u00f2\u0010\u00c0H\u00e1z\u0014\u00ae\u0007#\u00c0&\u0006\u0081\u0095C\u008b\u00fa\u00bf\u0003+\u0087\u0016\u00d9\u00ce\u00e7\u00bf&\u0006\u0081\u0095C\u008b$\u00c0\u0080j\u00bct\u0093\u0018\u00f4\u00bf\u009b\u0099\u0099\u0099\u0099\u0099\u00c9\u00bfR\u00b8\u001e\u0085\u00ebQ \u00c0\u00d4Mb\u0010X9\u00f4\u00bfy\u00e9&1\b\u00ac\u00d4\u00bf\u00a3E\u00b6\u00f3\u00fdT\u001e\u00c0L7\u0089A`\u00e5\u00f0\u00bf0\u00dd$\u0006\u0081\u0095\u00f3\u00bf\u0084\u00c0\u00ca\u00a1E6\u001d\u00c0=\n\u00d7\u00a3p=\u0002\u00c0sh\u0091\u00ed|?\u00d5?\u00be\u009f\u001a/\u00ddd \u00c0\u00fa~j\u00bct\u0093h\u00bfR\u00b8\u001e\u0085\u00ebQ\u00e0?\u00ee|?5^\u00ba\u001c\u00c0\u00a7\u009b\u00c4 \u00b0r\u00d8?\u00de$\u0006\u0081\u0095C\u00e3?\u00baI\f\u0002+\u0007!\u00c0\u00f7(\\\u008f\u00c2\u00f5\u00c8\u00bfP\u008d\u0097n\u0012\u0083\u00f8?\u00a8\u00c6K7\u0089\u00c1\u0018\u00c0\u00b5\u00c8v\u00be\u009f\u001a\u0004\u00c0\u00dfO\u008d\u0097n\u0012\u00c3\u00bf<\u00dfO\u008d\u0097.\"\u00c0\u00baI\f\u0002+\u0087\u00ee?j\u00bct\u0093\u0018\u0004\u00a6?\u00ecQ\u00b8\u001e\u0085\u00eb#\u00c0b\u0010X9\u00b4\u00c8\u00ea?\u008bl\u00e7\u00fb\u00a9\u00f1\u00da?\u00e8\u00fb\u00a9\u00f1\u00d2\u00cd\u001f\u00c0\u00c9v\u00be\u009f\u001a/\b\u00c07\u0089A`\u00e5\u00d0\u00f4?\u00a0\u001a/\u00dd$\u0086!\u00c0\u001a\u0004V\u000e-\u00b2\u0005\u00c0J\f\u0002+\u0087\u0016\u00fd?\u00b0rh\u0091\u00ed\u00fc\u001c\u00c0\u00f0\u00a7\u00c6K7\t\u0010\u00c0\u0018\u00d9\u00ce\u00f7S\u00e3\u00ff?n\u00e7\u00fb\u00a9\u00f1R\u0019\u00c0%\u0006\u0081\u0095C\u008b\f\u00c0\u0014\u00aeG\u00e1z\u0014\u0003@\u0094\u0018\u0004V\u000e-\u001b\u00c0P\u008d\u0097n\u0012\u0083\u0014\u00c0\u00db\u00f9~j\u00bct\u00f1?F\u00b6\u00f3\u00fd\u00d48 \u00c0,\u0087\u0016\u00d9\u00ce\u00f7\u0011\u00c0\u00b0rh\u0091\u00ed|\t@\u00b6\u00f3\u00fd\u00d4x)\"\u00c0\u00be\u009f\u001a/\u00dd\u00a4\u0013\u00c01\b\u00ac\u001cZd\u0007@\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd \u00c08\u0089A`\u00e5\u00d0\f\u00c0?5^\u00baI\f\u000e@\u008f\u00c2\u00f5(\\\u008f\u0016\u00c0\u0085\u00ebQ\u00b8\u001e\u0005\u0016\u00c0\u001dZd;\u00dfO\u00f3?R\u00b8\u001e\u0085\u00eb\u00d1\u001d\u00c0\u000b\u00d7\u00a3p=\n\u0016\u00c0\u00d5x\u00e9&1\u0088\u0010@\u00db\u00f9~j\u00bct\u001b\u00c0\u001c/\u00dd$\u0006\u0001\u0019\u00c08\u0089A`\u00e5\u00d0\f@\f\u0002+\u0087\u0016\u00d9\u0019\u00c0333333\u0013\u00c0\u00bct\u0093\u0018\u0004V\u0014@\u00fe\u00d4x\u00e9&1\u0018\u00c0\u00e2z\u0014\u00aeG\u00e1\u000e\u00c0w\u00be\u009f\u001a/\u00dd\u0012@\r\u0002+\u0087\u0016\u00d9\u0016\u00c0\u00c4\u00f5(\\\u008fB\u0016\u00c0\u00a0\u001a/\u00dd$\u0006\u0015@\u00ea&1\b\u00ac\u009c\u001c\u00c0Nb\u0010X9\u00b4\u0012\u00c0\u00fe\u00d4x\u00e9&\u00b1\u0017@\u0085\u00ebQ\u00b8\u001e\u0005!\u00c0\u00bf\u009f\u001a/\u00dd$\u0019\u00c0\u00d3Mb\u0010X\u00b9\u0013@\u0017\u00d9\u00ce\u00f7Sc\"\u00c0\u001f\u0085\u00ebQ\u00b8\u001e\u001b\u00c0\u00db\u00f9~j\u00bc\u00f4\u0010@1\b\u00ac\u001cZ$\"\u00c0w\u00be\u009f\u001a/]\u0016\u00c0=\n\u00d7\u00a3p=\u0016@\u00a8\u00c6K7\u0089\u0001 \u00c0\u00e3\u00a5\u009b\u00c4 0\u001c\u00c0\u00aa\u00f1\u00d2Mb\u0010\u0016@r=\n\u00d7\u00a3p\u001e\u00c0W\u000e-\u00b2\u009do\u0016\u00c0ffffff\u00c6?\u001dZd;\u00df\u000f!\u00c0\u0088\u0016\u00d9\u00ce\u00f7\u00d3\u0014\u00c0T\u00e3\u00a5\u009b\u00c4 \u00c0?\u00e4\u00a5\u009b\u00c4 0\u001d\u00c0L7\u0089A`e\u001a\u00c0\u0086\u00ebQ\u00b8\u001e\u0085\u00eb\u00bf\u0085\u00ebQ\u00b8\u001e\u0005\u001c\u00c0q=\n\u00d7\u00a3\u00f0\u001d\u00c0\u008cl\u00e7\u00fb\u00a9\u00f1\u00d2\u00bf\u0006\u0081\u0095C\u008b\u00ec\u0018\u00c0H\u00e1z\u0014\u00ae\u00c7\u0018\u00c0\u0090\u00c2\u00f5(\\\u008f\u00fe\u00bf\u00b2\u009d\u00ef\u00a7\u00c6K!\u00c0\u00f2\u00d2Mb\u0010\u00d8\u001b\u00c0\u00de$\u0006\u0081\u0095C\u00f9\u00bf\u00bct\u0093\u0018\u0004V\"\u00c0'1\b\u00ac\u001cZ\u0018\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u00ff\u00bfNb\u0010X9\u00b4\"\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5\u001d\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u00ec\u00bf-\u00b2\u009d\u00ef\u00a7\u00c6\u0014\u00c0j\u00bct\u0093\u0018\u0084\u001b\u00c0\u00d3Mb\u0010X9\u0001\u00c0\u00e3\u00a5\u009b\u00c4 \u00f0 \u00c0S\u00b8\u001e\u0085\u00eb\u00d1\u001f\u00c0\u001eZd;\u00dfO\u0006\u00c0\u0092\u00ed|?5\u00de\"\u00c0\u00a6\u009b\u00c4 \u00b0r\u001f\u00c0\t\u00ac\u001cZd;\n\u00c0\u00dc\u00f9~j\u00bct\u001e\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u00cd\u001e\u00c0R\u00b8\u001e\u0085\u00ebQ\u000b\u00c0\u0002+\u0087\u0016\u00d9\u008e \u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd\"\u00c0\u00ac\u001cZd;\u00df\u0001\u00c0\u00c1\u00ca\u00a1E\u00b6s!\u00c0\u00f0\u00a7\u00c6K7\u00c9$\u00c0\u0094\u0018\u0004V\u000e-\u0007\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u001e\u00c0n\u00e7\u00fb\u00a9\u00f1R#\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u00f2\u00bf_\u00baI\f\u0002\u00ab\u0019\u00c0/\u00dd$\u0006\u0081\u0015\u0014\u00c0\u0093\u0018\u0004V\u000e-\u0004\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u001c\u00c0\u00a8\u00c6K7\u0089\u00c1\u0011\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u0001\u00c0b\u0010X9\u00b4\u00c8\u0015\u00c09\u00b4\u00c8v\u00be\u009f\u0011\u00c0gfffff\u000b\u00c0sh\u0091\u00ed|?\u0015\u00c0\u009e\u00ef\u00a7\u00c6K7\u0014\u00c0^\u00baI\f\u0002+\u0011\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u000f\u00c0\u00ecQ\u00b8\u001e\u0085k\u0011\u00c0d;\u00dfO\u008d\u0097\u0006\u00c0F\u00b6\u00f3\u00fd\u00d4\u00f8\u0017\u00c0\u00bf\u009f\u001a/\u00dd$\b\u00c0C`\u00e5\u00d0\"\u00db\u000f\u00c0U\u00e3\u00a5\u009b\u00c4 \u0019\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\u0003\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\b\u00c0?5^\u00baI\f\b\u00c0Zd;\u00dfO\r\u0013\u00c0\u00a4p=\n\u00d7\u00a3\u000b\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\u001c\u00c09\u00b4\u00c8v\u00be\u009f\n\u00c0\f\u0002+\u0087\u0016\u00d9\u0013\u00c0w\u00be\u009f\u001a/]\u001b\u00c0h\u0091\u00ed|?5\u000f\u00c0\u00a2E\u00b6\u00f3\u00fdT\u0017\u00c0\u00db\u00f9~j\u00bct\u001f\u00c0H\u00e1z\u0014\u00aeG\u0010\u00c0\u00f6(\\\u008f\u00c2u\u0012\u00c0\u008f\u00c2\u00f5(\\\u008f\u0013\u00c0\u00e9&1\b\u00ac\u001c\u0002\u00c0\u0092\u00ed|?5\u00de\u0012\u00c0)\\\u008f\u00c2\u00f5\u00a8\u0011\u00c0\u00afG\u00e1z\u0014\u00ae\u0006\u00c0Zd;\u00dfO\r\u0016\u00c0h\u0091\u00ed|?\u00b5\u0014\u00c0\u0096C\u008bl\u00e7\u00fb\u00f3\u00bf\u00b0rh\u0091\u00ed\u00fc\u0013\u00c0\u00bct\u0093\u0018\u0004V\u0010\u00c0T\u00e3\u00a5\u009b\u00c4 \u0000\u00c0\u009a\u0099\u0099\u0099\u0099\u0019\u0010\u00c0\u009e\u00ef\u00a7\u00c6K7 \u00c0\u00fe\u00d4x\u00e9&1\u0001\u00c0L7\u0089A`e\u0015\u00c0U\u00e3\u00a5\u009b\u00c4 \u001e\u00c0H\u00e1z\u0014\u00aeG\u00f5\u00bf\u00d9\u00ce\u00f7S\u00e3%\u0017\u00c0\u009e\u00ef\u00a7\u00c6K\u00f7 \u00c0\u00afG\u00e1z\u0014\u00ae\u00fb\u00bf\u0093\u0018\u0004V\u000e\u00ad\u0011\u00c0\u00a2E\u00b6\u00f3\u00fd\u0094!\u00c0w\u00be\u009f\u001a/\u00dd\u0003\u00c0\u00d6x\u00e9&1\u0088\u0018\u00c0e;\u00dfO\u008d\u0097\u000e\u00c0\u00cav\u00be\u009f\u001a/\u000f\u00c0Zd;\u00dfO\u008d\u00f9\u00bfT\u00e3\u00a5\u009b\u00c4\u00a0\u0012\u00c0\u0088\u0016\u00d9\u00ce\u00f7S\r\u00c0H\u00e1z\u0014\u00aeG\u00f1\u00bfK\f\u0002+\u0087\u0016\u0004\u00c0\u0080j\u00bct\u0093\u0018\u000e\u00c0\u0099n\u0012\u0083\u00c0\u00ca\u00ed\u00bf%\u0006\u0081\u0095C\u008b\u00fc\u00bf\u00c8K7\u0089A`\u000b\u00c07\u0089A`\u00e5\u00d0\u00fa\u00bf\u00a2E\u00b6\u00f3\u00fd\u00d4\u0000\u00c0-\u00b2\u009d\u00ef\u00a7F\u0014\u00c0\u00a8\u00c6K7\u0089A\u00d8\u00bfY9\u00b4\u00c8v\u00be\u0004\u00c0\u001a\u0004V\u000e-\u00b2\u0005\u00c0\u00aeG\u00e1z\u0014\u00ae\u00c7?_\u00baI\f\u0002+\f\u00c0\n\u00d7\u00a3p=\n\u0007\u00c0\u0088\u0016\u00d9\u00ce\u00f7S\u00e7?(1\b\u00ac\u001cZ\u00ec\u00bf\u00aeG\u00e1z\u0014.\u0015\u00c0\u00d3Mb\u0010X9\u00dc\u00bf\u00c8K7\u0089A`\u0005\u00c05^\u00baI\f\u0002\u00f5\u00bf\u00b2\u009d\u00ef\u00a7\u00c6K\u00df\u00bf$\u00db\u00f9~j\u00bc\u00fa\u00bf\u00e0O\u008d\u0097n\u0012\u00ef\u00bf\u0003+\u0087\u0016\u00d9\u00ce\u00e7\u00bfD\u008bl\u00e7\u00fb\u00a9\t\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\u00f5\u00bfu\u0093\u0018\u0004V\u000e\u00f7\u00bf\u0014\u00aeG\u00e1z\u0014\u00f6\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u00c0j\u00bct\u0093\u0018\u0004\u00f2?\u00e2z\u0014\u00aeG\u00e1\u00f4\u00bf433333\f\u00c0\u00afG\u00e1z\u0014\u00ae\u00fb?\u007fj\u00bct\u0093\u0018\u00f6\u00bf*\\\u008f\u00c2\u00f5(\u00fc\u00bf%\u0006\u0081\u0095C\u008b\u00fc?\u00d9\u00ce\u00f7S\u00e3\u00a5\u00e3\u00bfh\u0091\u00ed|?5\u0005\u00c0\n\u00d7\u00a3p=\n\u00d7?\u00db\u00f9~j\u00bct\u000b\u00c0\u0014\u00aeG\u00e1z\u0014\u00ce\u00bf\u001dZd;\u00dfO\u00d5?\b\u00ac\u001cZd\u00bb\u0011\u00c0\t\u00ac\u001cZd;\u00df\u00bf\u00f4\u00fd\u00d4x\u00e9&\u00e5?\u0001\u0000\u0000\u0000\u0000\u0000\u0007\u00c0{\u0014\u00aeG\u00e1z\u0094?D\u008bl\u00e7\u00fb\u00a9\u00f3?\u00ecQ\u00b8\u001e\u0085\u00eb\f\u00c0\u0082\u0095C\u008bl\u00e7\u00e3?+\u0087\u0016\u00d9\u00ce\u00f7\u00d3\u00bfNb\u0010X9\u00b4\u0007\u00c0\u00b0rh\u0091\u00ed\u00fc\u0017\u00c09\u00b4\u00c8v\u00be\u009f\u00ba?<\u00dfO\u008d\u0097n\u000f\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2\u0016\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u00c6?\u00ac\u001cZd;\u00df\u0004\u00c0.\u00b2\u009d\u00ef\u00a7\u00c6\u001d\u00c0\u0090\u00c2\u00f5(\\\u008f\u00da?e;\u00dfO\u008d\u0097\u00fe\u00bf\u0093\u0018\u0004V\u000e-\u001e\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u00f4?th\u0091\u00ed|?\u00ff\u00bf\u00a8\u00c6K7\u0089A \u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\u00e8\u00bf\t\u00ac\u001cZd;\u000f\u00c0(1\b\u00ac\u001cZ \u00c0\u00e0O\u008d\u0097n\u0012\u00eb?d;\u00dfO\u008d\u0097\u0010\u00c0;\u00dfO\u008d\u0097\u00ee\u001e\u00c06^\u00baI\f\u0002\u00fd?\u00f0\u00a7\u00c6K7\u0089\u0012\u00c0H\u00e1z\u0014\u00ae\u0007 \u00c0z\u00e9&1\b\u00ac\u00ac?\u00b4\u00c8v\u00be\u009f\u001a\u00eb\u00bfo\u0012\u0083\u00c0\u00caa!\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u00e4\u00bf\u0094\u0018\u0004V\u000e-\f\u00c0\u009c\u00c4 \u00b0r(#\u00c0<\u00dfO\u008d\u0097n\u00ee?\u00cf\u00f7S\u00e3\u00a5\u009b\n\u00c0=\n\u00d7\u00a3p}#\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u00fe?\u0004V\u000e-\u00b2\u009d\u0004\u00c0fffff& \u00c0\u00f1\u00a7\u00c6K7\u0089\u00ff\u00bf2\b\u00ac\u001cZd\u000b\u00c0\u00a4p=\n\u00d7#\u001e\u00c0P\u008d\u0097n\u0012\u0083\u0000\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u0000\u00c0\u0019\u0004V\u000e-r!\u00c0h\u0091\u00ed|?5\t\u00c0\u00d2\"\u00db\u00f9~j\u00fe\u00bf\u00a0\u001a/\u00dd$\u0086#\u00c0\u0097C\u008bl\u00e7\u00fb\u0006\u00c0B`\u00e5\u00d0\"\u00db\u00e9\u00bf\u00b4\u00c8v\u00be\u009f\u001a \u00c0\u00b4\u00c8v\u00be\u009f\u001a\r\u00c0\u0003+\u0087\u0016\u00d9\u00ce\b\u00c0;\u00dfO\u008d\u0097.!\u00c0\u00f4\u00fd\u00d4x\u00e9&\u0011\u00c0\u00a4p=\n\u00d7\u00a3\u000b\u00c0\u00d4Mb\u0010X9\u001e\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u00d3\u0010\u00c0\u00db\u00f9~j\u00bct\u0005\u00c0\u00e5\u00d0\"\u00db\u00f9\u00be!\u00c0\u0085\u00ebQ\u00b8\u001e\u0005\u0015\u00c0\u00db\u00f9~j\u00bct\u00a3?\u00dd$\u0006\u0081\u0095\u0083!\u00c0X9\u00b4\u00c8v\u00be\u0010\u00c0333333\u0011\u00c0\u008f\u00c2\u00f5(\\\u000f#\u00c0F\u00b6\u00f3\u00fd\u00d4x\u000f\u00c0'1\b\u00ac\u001cZ\u0012\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\"\u00c0H\u00e1z\u0014\u00aeG\u0007\u00c0\u00d6x\u00e9&1\b\u000f\u00c0\u00ab\u00f1\u00d2Mb\u0010%\u00c0\u0089A`\u00e5\u00d0\"\u000f\u00c0\u008d\u0097n\u0012\u0083\u00c0\u0015\u00c0\u00b4\u00c8v\u00be\u009f\u00da\"\u00c0\u001eZd;\u00df\u00cf\u0013\u00c0 \u0085\u00ebQ\u00b8\u001e\u0017\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb \u00c0\u00c6 \u00b0rh\u0091\u0013\u00c0\u0085\u00ebQ\u00b8\u001e\u0085\u0014\u00c0\u009e\u00ef\u00a7\u00c6K\u00f7\"\u00c0\u00e5\u00d0\"\u00db\u00f9\u00fe\u0017\u00c0\u008f\u00c2\u00f5(\\\u000f\u001a\u00c0\u00e2z\u0014\u00aeG\u00e1$\u00c0\u0089A`\u00e5\u00d0\"\u0013\u00c0q=\n\u00d7\u00a3\u00f0\u001c\u00c0\u00b8\u001e\u0085\u00ebQ8$\u00c0\u0089A`\u00e5\u00d0\u00a2\u0010\u00c0\u0013\u0083\u00c0\u00ca\u00a1\u00c5\u0016\u00c0!\u00b0rh\u0091m(\u00c0%\u0006\u0081\u0095C\u008b\u0017\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\u0013\u00c0i\u0091\u00ed|?u'\u00c0\u00d2\"\u00db\u00f9~j\u0019\u00c0 \u0085\u00ebQ\u00b8\u001e\u0017\u00c0\u00f4\u00fd\u00d4x\u00e9f*\u00c0\u00b9\u001e\u0085\u00ebQ8\u0018\u00c0\u00c4\u00f5(\\\u008f\u00c2\u001e\u00c0\u008f\u00c2\u00f5(\\\u008f(\u00c0\u00dfO\u008d\u0097n\u0092\u0013\u00c0\u00d0\u00f7S\u00e3\u00a5\u001b\u001f\u00c0\u009e\u00ef\u00a7\u00c6Kw*\u00c0\u00dd$\u0006\u0081\u0095\u00c3\u0014\u00c0\u00c3\u00f5(\\\u008f\u0082 \u00c0\u00d5x\u00e9&1\b(\u00c0\u00c7K7\u0089A`\u0010\u00c0\u00f7(\\\u008f\u00c2u\u001a\u00c0\u0098n\u0012\u0083\u00c0J'\u00c0\u00b4\u00c8v\u00be\u009f\u009a\u0014\u00c0\u00f1\u00a7\u00c6K7\u0089\u00e5\u00bfj\u00bct\u0093\u0018\u0004\u001b\u00c0\u0092\u00ed|?5^\u000b\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u00f7\u00bf\u00c5 \u00b0rh\u0011\u0019\u00c0G\u00b6\u00f3\u00fd\u00d4x\b\u00c0\u0091\u00ed|?5^\u00e2?\u00bf\u009f\u001a/\u00dd$\u0018\u00c0:\u00b4\u00c8v\u00be\u009f\r\u00c0\u00bct\u0093\u0018\u0004V\u00ee?$\u00db\u00f9~j\u00bc\u0019\u00c0\u0014\u00aeG\u00e1z\u0094\u0012\u00c0\u0001\u0000\u0000\u0000\u0000\u0000\u00fc?\u0087\u0016\u00d9\u00ce\u00f7S\u0019\u00c0\u0094\u0018\u0004V\u000e-\u0006\u00c0\u00ef|?5^\u00ba\u00c9?\u00d7\u00a3p=\nW\u0012\u00c0\u009e\u00ef\u00a7\u00c6K7\u000e\u00c0V\u000e-\u00b2\u009d\u00ef\u00c7?\u00c1\u00ca\u00a1E\u00b6\u00f3\u0010\u00c0\u00f6(\\\u008f\u00c2\u00f5\u0005\u00c0\u00d2\"\u00db\u00f9~j\u00e8\u00bfZd;\u00dfO\r\u0012\u00c09\u00b4\u00c8v\u00be\u001f\u0011\u00c0\u001c/\u00dd$\u0006\u0081\u0006@\u00f4\u00fd\u00d4x\u00e9&\u001a\u00c0>\n\u00d7\u00a3p=\n\u00c0\"\u00b0rh\u0091\u00ed\u00f2?\u00ecQ\u00b8\u001e\u0085\u00eb\f\u00c0u\u0093\u0018\u0004V\u000e\u0012\u00c0\u00f4\u00fd\u00d4x\u00e9&\u00e9?\u00a0\u001a/\u00dd$\u0006\t\u00c0sh\u0091\u00ed|?\u0017\u00c0z\u00e9&1\b\u00ac\u00ac\u00bf\u00fe\u00d4x\u00e9&1\r\u00c05^\u00baI\f\u0002\u0019\u00c0\"\u00b0rh\u0091\u00ed\u0002@\u00ea&1\b\u00ac\u001c\t\u00c0\u00fb~j\u00bct\u0093\u000f\u00c0\u00a4p=\n\u00d7\u00a3\u0005@\u00f3\u00d2Mb\u0010X\f\u00c0\u0001\u0000\u0000\u0000\u0000\u0000\b\u00c0\u00fe\u00d4x\u00e9&1\u00fa?\u00b0rh\u0091\u00ed|\u0002\u00c0\u00c5 \u00b0rh\u0011\u001a\u00c0\u00e1z\u0014\u00aeG\u00e1\u00f6?[d;\u00dfO\u008d\u00ff\u00bf\u009a\u0099\u0099\u0099\u0099\u0019\u001e\u00c0~?5^\u00baI\t@/\u00dd$\u0006\u0081\u0095\u0001\u00c0\u0000\u0000\u0000\u0000\u0000\u0080\u0012\u00c0\u0081\u0095C\u008blg\u0010@\u0083\u00c0\u00ca\u00a1E\u00b6\u00fd\u00bf7\u0089A`\u00e5\u00d0\u0010\u00c0z\u00e9&1\b\u00ac\n@\u00a6\u009b\u00c4 \u00b0r\u00e4\u00bf\u00e2z\u0014\u00aeG\u00e1\u0019\u00c0B`\u00e5\u00d0\"\u00db\u0006@\u00c2\u00ca\u00a1E\u00b6\u00f3\u00e1\u00bf\u0084\u00c0\u00ca\u00a1E6\u001d\u00c0\u00ff\u00d4x\u00e9&1\u0006@\u00d8\u00a3p=\n\u00d7\u00fb\u00bf\u00f0\u00a7\u00c6K7\u0089\u0017\u00c0\u001b/\u00dd$\u0006\u0081\u00f9?^\u00baI\f\u0002+\u0019\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u00f6\u00bf\u009d\u00c4 \u00b0rh\u00e9?\u00b4\u00c8v\u00be\u009f\u009a\u0017\u00c0h\u0091\u00ed|?5\u00ee\u00bf\u007fj\u00bct\u0093\u0018\u0005@\u0092\u00ed|?5^\u001a\u00c0\t\u00ac\u001cZd;\u00df\u00bf`\u00e5\u00d0\"\u00db\u00f9\u000b@\u008e\u0097n\u0012\u0083@\u0018\u00c0#\u00db\u00f9~j\u00bc\u00ec\u00bf\u0085\u00ebQ\u00b8\u001e\u0085\b@V\u000e-\u00b2\u009d/ \u00c0q=\n\u00d7\u00a3p\u00e1\u00bf\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\u0002@\u00a2E\u00b6\u00f3\u00fdT\u0018\u00c0G\u00b6\u00f3\u00fd\u00d4x\u00ed?\u0004V\u000e-\u00b2\u009d\u00f7?[d;\u00dfO\u008d\u001a\u00c0{\u0014\u00aeG\u00e1z\u00f4?\u00dc\u00f9~j\u00bct\t@L7\u0089A`e\u0019\u00c0^\u00baI\f\u0002+\u00f9?^\u00baI\f\u0002+\u0011@\u00ac\u001cZd;\u009f \u00c0\u00c7K7\u0089A`\u00dd\u00bf-\u00b2\u009d\u00ef\u00a7\u00c6\u0000@)\\\u008f\u00c2\u00f5(\u0012\u00c0D\u008bl\u00e7\u00fb\u00a9\u00ed?\u009a\u0099\u0099\u0099\u0099\u0099\u00f5?\u00b4\u00c8v\u00be\u009f\u001a\u0011\u00c0\u0003+\u0087\u0016\u00d9\u00ce\u00c7?\u00e6\u00d0\"\u00db\u00f9~\u00f8?\u00ee|?5^:\u0010\u00c05^\u00baI\f\u0002\u0002@u\u0093\u0018\u0004V\u000e\u00ed?\\\u008f\u00c2\u00f5(\\\t\u00c0\u00be\u009f\u001a/\u00dd$\u0001@\u00aeG\u00e1z\u0014\u00ae\u00ef?\u00e9&1\b\u00ac\u009c\u0013\u00c0P\u008d\u0097n\u0012\u0083\u0005@th\u0091\u00ed|?\u0003@{\u0014\u00aeG\u00e1z\u000e\u00c0n\u00e7\u00fb\u00a9\u00f1\u00d2\u0006@\f\u0002+\u0087\u0016\u00d9\n@\u00e8\u00fb\u00a9\u00f1\u00d2M\r\u00c0=\n\u00d7\u00a3p=\u00e2?\u00aa\u00f1\u00d2Mb\u0010\r@\u0086\u00ebQ\u00b8\u001e\u0085\u000f\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u00dc\u00bf\b\u00ac\u001cZd\u00bb\u0010@\u009a\u0099\u0099\u0099\u0099\u0099\u000f\u00c00\u00dd$\u0006\u0081\u0095\u00f3?L7\u0089A`\u00e5\b@\u0098n\u0012\u0083\u00c0\u00ca\u0004\u00c0#\u00db\u00f9~j\u00bc\u00e0?\u00ee|?5^\u00ba\u0001@\u00f8S\u00e3\u00a5\u009b\u0004\"\u00c0\u00a8\u00c6K7\u0089A\u00ec\u00bf>\n\u00d7\u00a3p=\u00f4?\u0004V\u000e-\u00b2]!\u00c0V\u000e-\u00b2\u009d\u00ef\u00ef\u00bfv\u0093\u0018\u0004V\u000e\u0005@\u00baI\f\u0002+\u00c7$\u00c0\u00b7\u00f3\u00fd\u00d4x\u00e9\u00f4\u00bf433333\n@\u0002+\u0087\u0016\u00d9\u008e%\u00c0{\u0014\u00aeG\u00e1z\u00e0\u00bf\u00cc\u00a1E\u00b6\u00f3\u00fd\u000b@\u00ac\u001cZd;\u00df$\u00c0h\u0091\u00ed|?5\u0004\u00c0H\u00e1z\u0014\u00aeG\u00f7?\u00cb\u00a1E\u00b6\u00f3\u00bd&\u00c0u\u0093\u0018\u0004V\u000e\u00f7\u00bf\u0013\u0083\u00c0\u00ca\u00a1E\u00fe?;\u00dfO\u008d\u0097\u00ae(\u00c0x\u00be\u009f\u001a/\u00dd\u00fa\u00bf\u00e7\u00fb\u00a9\u00f1\u00d2M\u00e6?\u00ef|?5^\u00fa%\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u00c0\u00aa\u00f1\u00d2Mb\u0090\u0012@\u009c\u00c4 \u00b0r\u00e8%\u00c0\u00baI\f\u0002+\u0087\u0003\u00c0\u0090\u00c2\u00f5(\\\u008f\u00ea?\u00ecQ\u00b8\u001e\u0085+'\u00c0\u001c/\u00dd$\u0006\u0081\u00b5\u00bfj\u00bct\u0093\u0018\u0004\u00f6?sh\u0091\u00ed|\u007f(\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u00e3?j\u00bct\u0093\u0018\u0004\u00e6?\u00d1\"\u00db\u00f9~j%\u00c0J\f\u0002+\u0087\u0016\u00e1?\u00c2\u00ca\u00a1E\u00b6\u00f3\u00e1\u00bfNb\u0010X9t(\u00c0X9\u00b4\u00c8v\u00be\u00d7\u00bf#\u00db\u00f9~j\u00bc\u00e0\u00bf[d;\u00dfOM*\u00c0\u00bct\u0093\u0018\u0004V\u00ee\u00bf\u00bct\u0093\u0018\u0004V\u00f2\u00bf\u00bct\u0093\u0018\u0004\u00d6&\u00c0\u00edQ\u00b8\u001e\u0085\u00eb\u00e9\u00bf\u00d0\u00f7S\u00e3\u00a5\u009b\u00f2\u00bf\u008d\u0097n\u0012\u0083\u0000)\u00c0\u00f0\u00a7\u00c6K7\u0089\u00ed?\u0098n\u0012\u0083\u00c0\u00ca\u00e1\u00bf\u009a\u0099\u0099\u0099\u0099\u00d9(\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u00fb?2\b\u00ac\u001cZd\t\u00c0\u00c2\u00ca\u00a1E\u00b6\u00b3*\u00c0z\u00e9&1\b\u00ac\u00bc?\u0014\u00aeG\u00e1z\u0094\u0010\u00c0\u009f\u00ef\u00a7\u00c6K7+\u00c0*\\\u008f\u00c2\u00f5(\u00cc?\u00e9&1\b\u00ac\u001c\u0006\u00c0th\u0091\u00ed|\u00bf*\u00c0B`\u00e5\u00d0\"\u00db\u00e9\u00bf\u00da\u00ce\u00f7S\u00e3\u00a5\u0007\u00c0\u00d7\u00a3p=\n\u0017*\u00c0F\u00b6\u00f3\u00fd\u00d4x\u0002@sh\u0091\u00ed|?\u0002\u00c0$\u00db\u00f9~j\u00fc)\u00c0\u00a7\u009b\u00c4 \u00b0r\b@~?5^\u00baI\u000e\u00c0\u00dc\u00f9~j\u00bc4+\u00c0\u00bct\u0093\u0018\u0004V\u0003@\u00baI\f\u0002+\u0087\u0003\u00c0\u0006\u0081\u0095C\u008b\u00ec)\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u00f2?\u008f\u00c2\u00f5(\\\u008f\b@\u00fc\u00a9\u00f1\u00d2M\u00e2#\u00c0\u00b3\u009d\u00ef\u00a7\u00c6K\r\u00c0\u00e1z\u0014\u00aeG\u00e1\u0000@7\u0089A`\u00e5P#\u00c0\u00c8K7\u0089A`\u000e\u00c0\u009b\u0099\u0099\u0099\u0099\u0099\u000e@b\u0010X9\u00b4\u0088#\u00c0\u00d2\"\u00db\u00f9~j\u0013\u00c0\u00ee|?5^:\u0010@th\u0091\u00ed|\u007f%\u00c0\u00f0\u00a7\u00c6K7\t\u0015\u00c0\u0096C\u008bl\u00e7\u00fb\u0014@\u0094\u0018\u0004V\u000em\"\u00c0J\f\u0002+\u0087\u0096\u0012\u00c0\u009e\u00ef\u00a7\u00c6K7\b@\u00f8S\u00e3\u00a5\u009b\u0004\"\u00c0\u009f\u00ef\u00a7\u00c6K\u00b7\u0017\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u0000@%\u0006\u0081\u0095C\u000b#\u00c0<\u00dfO\u008d\u0097n\u0018\u00c0Zd;\u00dfO\u008d\u0006@\u0096C\u008bl\u00e7\u00fb\u001f\u00c0\u008e\u0097n\u0012\u0083@\u0016\u00c0 \u0085\u00ebQ\u00b8\u001e\u0019@\u00a6\u009b\u00c4 \u00b0r#\u00c0\u00baI\f\u0002+\u0087\u0014\u00c0\u00b5\u00c8v\u00be\u009f\u001a\u000e@\u001dZd;\u00df\u008f!\u00c0B`\u00e5\u00d0\"\u00db\u001c\u00c0X9\u00b4\u00c8v>\u0011@\f\u0002+\u0087\u0016Y#\u00c0\u00d5x\u00e9&1\b\u001e\u00c0y\u00e9&1\b,\u0012@d;\u00dfO\u008d\u0017 \u00c06^\u00baI\f\u0002\u001c\u00c0\u00a3E\u00b6\u00f3\u00fd\u00d4\u0006@\u00cb\u00a1E\u00b6\u00f3\u00bd \u00c0\u00be\u009f\u001a/\u00dd\u00a4 \u00c0\u000e-\u00b2\u009d\u00ef\u00a7\n@W\u000e-\u00b2\u009d\u00ef\u001d\u00c0\u001a\u0004V\u000e-2\"\u00c0\u00bct\u0093\u0018\u0004V\u00fa?\u008e\u0097n\u0012\u0083@!\u00c0\u00e9&1\b\u00ac\u00dc \u00c0(1\b\u00ac\u001cZ\u0015@\u00cd\u00cc\u00cc\u00cc\u00cc\f \u00c0\u008f\u00c2\u00f5(\\\u000f\u0010\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u0011@C`\u00e5\u00d0\"[\u001e\u00c0B`\u00e5\u00d0\"\u00db\u000e\u00c0433333\u001a@6^\u00baI\f\u0082\u001d\u00c0 \u0085\u00ebQ\u00b8\u001e\r\u00c0H\u00e1z\u0014\u00aeG\u001c@\u00ab\u00f1\u00d2Mb\u0090\u001c\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2M\u0012\u00c0sh\u0091\u00ed|\u00bf\u001d@\u0081\u0095C\u008blg \u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M\u0006\u00c0y\u00e9&1\b\u00ac\u0018@h\u0091\u00ed|?5\u0018\u00c0\u0097C\u008bl\u00e7\u00fb\u0006\u00c0\u0084\u00c0\u00ca\u00a1E6\u001c@\u00a8\u00c6K7\u0089A\u0016\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u0003\u00c0\u00e2z\u0014\u00aeG\u00e1\u0015@9\u00b4\u00c8v\u00be\u001f\u0019\u00c0/\u00dd$\u0006\u0081\u0095\u0000\u00c0T\u00e3\u00a5\u009b\u00c4`!@\u0098n\u0012\u0083\u00c0\n \u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u0007\u00c0L7\u0089A`\u00e5\u0015@\u00b8\u001e\u0085\u00ebQ8\u0014\u00c0$\u00db\u00f9~j\u00bc\u000e\u00c0\u0086\u00ebQ\u00b8\u001e\u0005\u0014@Zd;\u00dfO\r\u0011\u00c0\u00ab\u00f1\u00d2Mb\u0010\n\u00c0b\u0010X9\u00b4\u00c8\u0012@\u00d7\u00a3p=\nW\u0016\u00c0\u00fa~j\u00bct\u0093\u0011\u00c0e;\u00dfO\u008d\u0097\u0019@\u0081\u0095C\u008bl\u00e7\u0011\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u0013\u00c0\u0093\u0018\u0004V\u000e\u00ad\u0017@\u00ecQ\u00b8\u001e\u0085\u00eb\u0011\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u0018\u00c0\u008f\u00c2\u00f5(\\\u000f\u0014@\u00b4\u00c8v\u00be\u009f\u009a\u0013\u00c0&\u0006\u0081\u0095C\u008b\u0019\u00c0\u00d1\"\u00db\u00f9~\u00ea\u0019@\u00cb\u00a1E\u00b6\u00f3}\u0010\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u00d3\u001b\u00c0K\f\u0002+\u0087\u0016\u001e@y\u00e9&1\b,\u0010\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\u0012\u00c0\u0082\u0095C\u008blg\u001b@q=\n\u00d7\u00a30\"\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u00fe\u00bf\u0082\u0095C\u008blg\u0017@5^\u00baI\f\u0002\"\u00c0\u0018\u00d9\u00ce\u00f7S\u00e3\u00fd\u00bf\u00d8\u00a3p=\nW\u001e@\u00b2\u009d\u00ef\u00a7\u00c6\u000b$\u00c0H\u00e1z\u0014\u00aeG\u00f1\u00bf-\u00b2\u009d\u00ef\u00a7\u0006!@{\u0014\u00aeG\u00e1\u00fa\"\u00c0\u0089A`\u00e5\u00d0\"\u00eb\u00bf\u0013\u0083\u00c0\u00ca\u00a1E\u001f@\u0010X9\u00b4\u00c8\u00f6&\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\u00f9\u00bf!\u00b0rh\u0091\u00ed\u001b@`\u00e5\u00d0\"\u00db\u00f9#\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u00d2?\u001f\u0085\u00ebQ\u00b8\u001e\u001b@{\u0014\u00aeG\u00e1\u00fa!\u00c0\u00f2\u00d2Mb\u0010X\u00e5?\u00bf\u009f\u001a/\u00dd$\u0018@\u00c5 \u00b0rh\u0011%\u00c0\u00fe\u00d4x\u00e9&1\u00d8?\u00e6\u00d0\"\u00db\u00f9\u00fe\u001e@\u00e2z\u0014\u00aeG\u00a1$\u00c0\u00d8\u00a3p=\n\u00d7\u00ef?R\u00b8\u001e\u0085\u00ebQ @\u00f3\u00d2Mb\u0010\u00d8(\u00c0\u00ad\u001cZd;\u00df\u00eb\u00bf\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u001e@\u00c3\u00f5(\\\u008fB'\u00c0G\u00b6\u00f3\u00fd\u00d4x\u0007\u00c0\u000f-\u00b2\u009d\u00ef\u00a7\u001d@\u009d\u00c4 \u00b0r\u00a8%\u00c0\u00ad\u001cZd;\u00df\u000b\u00c0\u00be\u009f\u001a/\u00dd$\u001f@;\u00dfO\u008d\u0097\u00ee)\u00c0n\u00e7\u00fb\u00a9\u00f1\u00d2\f\u00c0d;\u00dfO\u008d\u00d7 @\u0015\u00aeG\u00e1zT+\u00c0ffffff\b\u00c0\u0014\u00aeG\u00e1z\u0094 @\u0094\u0018\u0004V\u000e\u00ad)\u00c0\u00cf\u00f7S\u00e3\u00a5\u001b\u0014\u00c0\u008aA`\u00e5\u00d0\u00a2\u0019@\u0000\u0000\u0000\u0000\u0000@+\u00c0\u00baI\f\u0002+\u0087\u000e\u00c0\u009d\u00c4 \u00b0rh\u0019@q=\n\u00d7\u00a3\u00f0,\u00c0\u00b0rh\u0091\u00ed\u00fc\u0011\u00c07\u0089A`\u00e5\u0090!@\u00f2\u00d2Mb\u0010\u0098+\u00c0^\u00baI\f\u0002\u00ab\u0016\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0016@\u00a7\u009b\u00c4 \u00b02,\u00c0\u0007\u0081\u0095C\u008bl\u0004\u00c0\u00ecQ\u00b8\u001e\u0085k\u0018@y\u00e9&1\b,+\u00c0b\u0010X9\u00b4\u00c8\u00fa\u00bfp\u0012\u0083\u00c0\u00ca\u00a1\u0017@e;\u00dfO\u008dW.\u00c0^\u00baI\f\u0002+\u0004\u00c0\u0085\u00ebQ\u00b8\u001e\u0085\u0012@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc+\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u0004\u00c0\u00d1\"\u00db\u00f9~j\u0016@\u00e8\u00fb\u00a9\u00f1\u00d2M)\u00c0H\u00e1z\u0014\u00ae\u00c7\u0011\u00c0\u0091\u00ed|?5\u00de\u0015@\u0080j\u00bct\u0093\u0018(\u00c0\u000f-\u00b2\u009d\u00ef\u00a7\r\u00c0\u0004V\u000e-\u00b2] @\u0085\u00ebQ\u00b8\u001eE'\u00c0+\u0087\u0016\u00d9\u00cew\u0016\u00c0\u00c6 \u00b0rh\u0091\u001e@\u009a\u0099\u0099\u0099\u0099\u00d9%\u00c0\u0004V\u000e-\u00b2\u009d\u0014\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\r!@\u00d9\u00ce\u00f7S\u00e3\u00e5&\u00c0\u000b\u00d7\u00a3p=\n\u001c\u00c09\u00b4\u00c8v\u00be\u00df\"@\u0092\u00ed|?5\u00de'\u00c0<\u00dfO\u008d\u0097n\u001d\u00c0\u00db\u00f9~j\u00bc\u00b4!@\u00d7\u00a3p=\n\u00d7$\u00c0\u00de$\u0006\u0081\u0095\u00c3\u001c\u00c08\u0089A`\u00e5\u00d0\u001d@\u008cl\u00e7\u00fb\u00a9\u00b1'\u00c0\u00c5 \u00b0rh\u0011 \u00c0\u0085\u00ebQ\u00b8\u001e\u0085\u001e@-\u00b2\u009d\u00ef\u00a7F'\u00c0Nb\u0010X9t\"\u00c0\u0014\u00aeG\u00e1z\u0014\u0019@B`\u00e5\u00d0\"\u009b(\u00c0\u001a\u0004V\u000e-2\u001e\u00c0\u00aeG\u00e1z\u0014\u00ae\u0018@\u00b8\u001e\u0085\u00ebQ\u00b8(\u00c0^\u00baI\f\u0002+\u001a\u00c0\u00e2z\u0014\u00aeG\u00e1\u0014@\u00cav\u00be\u009f\u001a\u00af)\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd \u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0014@\u00a8\u00c6K7\u0089\u0081(\u00c0\u00a4p=\n\u00d7\u00a3\"\u00c0&\u0006\u0081\u0095C\u008b\u000e@\u00db\u00f9~j\u00bc4)\u00c0\u009c\u00c4 \u00b0r\u00e8\u001e\u00c0F\u00b6\u00f3\u00fd\u00d4\u00f8\u0015@)\\\u008f\u00c2\u00f5\u00a8,\u00c0o\u0012\u0083\u00c0\u00caa!\u00c0\u00f6(\\\u008f\u00c2u\u0013@\u00be\u009f\u001a/\u00ddd-\u00c0\u0086\u00ebQ\u00b8\u001e\u0005#\u00c0{\u0014\u00aeG\u00e1z\u0015@\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd-\u00c0\u00d0\u00f7S\u00e3\u00a5\u001b\u001f\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2\u0019@\u00c3\u00f5(\\\u008f\u0002-\u00c0\u00dd$\u0006\u0081\u0095C\"\u00c0?5^\u00baI\f\r@\u00a4p=\n\u00d7#)\u00c0\t\u00ac\u001cZd;\u001a\u00c0%\u0006\u0081\u0095C\u008b\u0006@G\u00b6\u00f3\u00fd\u00d4\u00b8(\u00c0\u00e3\u00a5\u009b\u00c4 0!\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\b@\u00ce\u00cc\u00cc\u00cc\u00ccL)\u00c0\u0014\u00aeG\u00e1z\u0014#\u00c0L7\u0089A`\u00e5\u00f6?\u0085\u00ebQ\u00b8\u001eE(\u00c0d;\u00dfO\u008d\u0097 \u00c0!\u00b0rh\u0091\u00ed\u00f6?W\u000e-\u00b2\u009do&\u00c0c\u0010X9\u00b4\u00c8\u001e\u00c0\u00d3Mb\u0010X9\u00ec?-\u00b2\u009d\u00ef\u00a7\u0086*\u00c0\u00e6\u00d0\"\u00db\u00f9~\u001d\u00c0\u0014\u00aeG\u00e1z\u0014\u00e2?!\u00b0rh\u0091m(\u00c0m\u00e7\u00fb\u00a9\u00f1\u0012#\u00c0\u00d6x\u00e9&1\b\u00ec?\u0014\u00aeG\u00e1z\u00d4&\u00c0L7\u0089A`e$\u00c0#\u00db\u00f9~j\u00bc\u00dc\u00bf\u00f8S\u00e3\u00a5\u009b\u0004(\u00c0B`\u00e5\u00d0\"[\"\u00c0\\\u008f\u00c2\u00f5(\\\u00f3?\u00d8\u00a3p=\n\u00d7,\u00c0\u00f9S\u00e3\u00a5\u009b\u00c4\u001d\u00c01\b\u00ac\u001cZd\u00e3?\u007fj\u00bct\u0093\u0018+\u00c0\u00e2z\u0014\u00aeG\u00a1$\u00c0>\n\u00d7\u00a3p=\u00fa?\t\u00ac\u001cZd{+\u00c0|\u0014\u00aeG\u00e1:%\u00c0\u00bbI\f\u0002+\u0087\u00c6?\u0099n\u0012\u0083\u00c0\u00ca,\u00c0\u008f\u00c2\u00f5(\\\u008f#\u00c0\u008f\u00c2\u00f5(\\\u008f\u00c2\u00bf\u0017\u00d9\u00ce\u00f7S\u00a3*\u00c0L7\u0089A`%'\u00c0\u00f6(\\\u008f\u00c2\u00f5\u00f2\u00bf\u009a\u0099\u0099\u0099\u0099\u0019*\u00c0R\u00b8\u001e\u0085\u00eb\u00d1&\u00c0\u008e\u0097n\u0012\u0083\u00c0\u00da?\u0007\u0081\u0095C\u008b,)\u00c0\u00c6 \u00b0rhQ(\u00c0\u00d6x\u00e9&1\b\u00cc\u00bf\u0085\u00ebQ\u00b8\u001eE-\u00c0G\u00b6\u00f3\u00fd\u00d4\u00b8(\u00c0\u0010X9\u00b4\u00c8v\u00f0\u00bfh\u0091\u00ed|?\u00f5,\u00c0\u00e1z\u0014\u00aeG!*\u00c0sh\u0091\u00ed|?\u00e1\u00bf\u0015\u00aeG\u00e1z\u00d4.\u00c0\u00d7\u00a3p=\nW'\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u00f1?.\u00b2\u009d\u00ef\u00a7\u00c6-\u00c0\u008f\u00c2\u00f5(\\\u00cf)\u00c0y\u00e9&1\b\u00ac\u00f8?`\u00e5\u00d0\"\u00db9,\u00c0\u0085\u00ebQ\u00b8\u001e\u00c5*\u00c0\u00b2\u009d\u00ef\u00a7\u00c6K\u00f1?\u00b5\u00c8v\u00be\u009fZ/\u00c07\u0089A`\u00e5\u0010+\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\u00fb?\u00b4\u00c8v\u00be\u009fZ.\u00c0\u00bdt\u0093\u0018\u0004V(\u00c0\u00ecQ\u00b8\u001e\u0085\u00eb\u00a1\u00bfy\u00e9&1\b\u00ac)\u00c0\u00c7K7\u0089A\u00e0\u0019\u00c0r=\n\u00d7\u00a3p\u00bd\u00bf\u00b6\u00f3\u00fd\u00d4x\u00a9'\u00c0Zd;\u00dfO\r\u001a\u00c0y\u00e9&1\b\u00ac\u00e8\u00bf]\u008f\u00c2\u00f5(\\+\u00c0^\u00baI\f\u0002+\u0016\u00c09\u00b4\u00c8v\u00be\u009f\u009a\u00bfD\u008bl\u00e7\u00fbi,\u00c0\u00bct\u0093\u0018\u0004\u00d6\u0013\u00c0d;\u00dfO\u008d\u0097\u00fc\u00bf\u00c3\u00f5(\\\u008fB-\u00c0i\u0091\u00ed|?\u00b5\u0018\u00c0|\u0014\u00aeG\u00e1z\u00f8\u00bf\u000e-\u00b2\u009d\u00ef\u00a7)\u00c0\u00be\u009f\u001a/\u00dd$\u0012\u00c0\u0011X9\u00b4\u00c8v\u00ee\u00bf\u00cf\u00f7S\u00e3\u00a5\u00db'\u00c0sh\u0091\u00ed|?\u0011\u00c0\u00dfO\u008d\u0097n\u0012\u0003\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2(\u00c0\u0002+\u0087\u0016\u00d9N\u0014\u00c0=\n\u00d7\u00a3p=\u0006\u00c0\u00bdt\u0093\u0018\u0004V,\u00c0r=\n\u00d7\u00a3\u00f0\u001a\u00c0\u00aa\u00f1\u00d2Mb\u0010\u0001\u00c0\u0005V\u000e-\u00b2\u001d+\u00c0b\u0010X9\u00b4\u00c8\n\u00c0B`\u00e5\u00d0\"\u00db\u0006\u00c0Zd;\u00dfO\u00cd)\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u0004\u00c0\t\u00ac\u001cZd;\u00ff\u00bf\u00f3\u00d2Mb\u0010\u0098-\u00c0\u00d7\u00a3p=\n\u00d7\t\u00c0!\u00b0rh\u0091\u00ed\u00f6\u00bf$\u00db\u00f9~j\u00bc/\u00c0\u00ac\u001cZd;\u00df\u0017\u00c0\u00b5\u00c8v\u00be\u009f\u001a\u00df\u00bf\u00d6x\u00e9&1\b0\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\u0016\u00c0\u0014\u00aeG\u00e1z\u0014\u0001\u00c0\u00db\u00f9~j\u00bc\u00141\u00c0R\u00b8\u001e\u0085\u00eb\u00d1\u0018\u00c0\u00fa~j\u00bct\u0093\u0000\u00c0\u00e1z\u0014\u00aeGA1\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u001d\u00c0B`\u00e5\u00d0\"\u00db\f\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\f1\u00c0;\u00dfO\u008d\u0097n\u0017\u00c0\u00a8\u00c6K7\u0089A\u00f6\u00bf\u00d4Mb\u0010XY2\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0016\u00c0\u00a6\u009b\u00c4 \u00b0r\u00fa\u00bf\u00d4Mb\u0010XY2\u00c0%\u0006\u0081\u0095C\u008b\u0012\u00c0\f\u0002+\u0087\u0016Y\u0011\u00c0\u00baI\f\u0002+\u00c71\u00c0433333\u001a\u00c0\u0093\u0018\u0004V\u000e-\u00fe\u00bf\u00f0\u00a7\u00c6K7\u00a93\u00c0\u00de$\u0006\u0081\u0095C\u0019\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u00fc\u00bf\u0002+\u0087\u0016\u00d9\u008e3\u00c0\u0015\u00aeG\u00e1z\u0094\u001d\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5\u0006\u00c0\u00c7K7\u0089A\u00004\u00c0T\u00e3\u00a5\u009b\u00c4\u00a0\u0017\u00c0\u0081\u0095C\u008bl\u00e7\u00f1\u00bf\u00bf\u009f\u001a/\u00ddd4\u00c0\u00e4\u00a5\u009b\u00c4 0\u0018\u00c0*\\\u008f\u00c2\u00f5(\u00ac\u00bf\u00dd$\u0006\u0081\u0095C2\u00c0\u0082\u0095C\u008blg\u0017\u00c05^\u00baI\f\u0002\u00d3?\u00c1\u00ca\u00a1E\u00b6\u00132\u00c0\u0006\u0081\u0095C\u008b\u00ec\u0013\u00c01\b\u00ac\u001cZd\u0010\u00c0\u008bl\u00e7\u00fb\u00a9Q0\u00c0\u00d8\u00a3p=\nW\u0013\u00c0\u00d1\"\u00db\u00f9~j\u000b\u00c0\u00c9v\u00be\u009f\u001ao/\u00c0\u00c5 \u00b0rh\u0091\u0011\u00c0\u0081\u0095C\u008bl\u00e7\u0015\u00c0!\u00b0rh\u0091-0\u00c0\u00ecQ\u00b8\u001e\u0085k\u0011\u00c0\u009a\u0099\u0099\u0099\u0099\u0019\u0017\u00c0\u00e9&1\b\u00ac\u001c1\u00c0\u00f6(\\\u008f\u00c2\u00f5\u000e\u00c0|\u0014\u00aeG\u00e1\u00fa\u0019\u00c0z\u00e9&1\b\u00ac/\u00c0\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0015\u00c0J\f\u0002+\u0087\u0016\u0016\u00c05^\u00baI\f\u0002.\u00c0&\u0006\u0081\u0095C\u008b\n\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u0012\u00c0\u001dZd;\u00df\u000f.\u00c0B`\u00e5\u00d0\"\u00db\u0004\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2\u0014\u00c0c\u0010X9\u00b4H,\u00c02\b\u00ac\u001cZd\u000f\u00c0\u00f8S\u00e3\u00a5\u009bD\u0019\u00c0\u0000\u0000\u0000\u0000\u0000\u00c0-\u00c0\u0089A`\u00e5\u00d0\u00a2\u0018\u00c0\u00c4\u00f5(\\\u008fB\u001b\u00c0\u00f4\u00fd\u00d4x\u00e9\u00a6-\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u0004\u00c0\u00c2\u00ca\u00a1E\u00b6s\u001e\u00c0\u00cc\u00a1E\u00b6\u00f3=-\u00c0$\u00db\u00f9~j\u00bc\n\u00c0\u00ee|?5^\u00ba\u001c\u00c0{\u0014\u00aeG\u00e1z/\u00c0333333\u0001\u00c0Ob\u0010X9\u00b4\u001b\u00c0\u00f7(\\\u008f\u00c2u+\u00c0j\u00bct\u0093\u0018\u0004\u00fa\u00bf\u0087\u0016\u00d9\u00ce\u00f7S\u0019\u00c0\u009e\u00ef\u00a7\u00c6K\u00f7+\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u00e7\u00bf\u00a9\u00c6K7\u0089A\u001a\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u008d)\u00c0^\u00baI\f\u0002+\u0000\u00c07\u0089A`\u00e5\u00d0 \u00c0\u0005V\u000e-\u00b2\u001d+\u00c0\u00ea&1\b\u00ac\u001c\u00f4\u00bf\u0091\u00ed|?5\u001e\"\u00c0\u00b1rh\u0091\u00ed<+\u00c06^\u00baI\f\u0002\u0001\u00c0w\u00be\u009f\u001a/]!\u00c0K\f\u0002+\u0087\u00d6,\u00c0\u00a9\u00c6K7\u0089A\u00e4\u00bf^\u00baI\f\u0002+!\u00c07\u0089A`\u00e5\u0090(\u00c0\u009e\u00ef\u00a7\u00c6K7\u00e1\u00bf\u00a8\u00c6K7\u0089\u0001 \u00c0\u00cav\u00be\u009f\u001a\u00af(\u00c0\u00ee|?5^\u00ba\u00d1?\u00f0\u00a7\u00c6K7\u00c9 \u00c0\u009e\u00ef\u00a7\u00c6K\u00f7&\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u00f1\u00bf\u008d\u0097n\u0012\u0083\u0000#\u00c0J\f\u0002+\u0087V(\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u00c0\u00bf\u00f2\u00d2Mb\u0010X\u001e\u00c0\u00be\u009f\u001a/\u00dd\u00a40\u00c0v\u0093\u0018\u0004V\u008e\u0016\u00c0\u009c\u00c4 \u00b0rh!\u00c0\\\u008f\u00c2\u00f5(|0\u00c0\u00b0rh\u0091\u00ed|\u001a\u00c0\u001dZd;\u00df\u008f \u00c0L7\u0089A`\u00a50\u00c0\u00a7\u009b\u00c4 \u00b0r\u001e\u00c0\u0089A`\u00e5\u00d0\u00a2\"\u00c0\u00f2\u00d2Mb\u0010\u0018.\u00c0\u0018\u00d9\u00ce\u00f7S\u00e3\u001a\u00c0\u0014\u00aeG\u00e1z\u0094#\u00c0\u0006\u0081\u0095C\u008b\u008c1\u00c0\u00f1\u00a7\u00c6K7\t\u0019\u00c0\u009c\u00c4 \u00b0r\u00a8$\u00c0L7\u0089A`\u00e51\u00c0/\u00dd$\u0006\u0081\u0095\u001c\u00c0sh\u0091\u00ed|\u00ff$\u00c0sh\u0091\u00ed|\u001f1\u00c0\u00b8\u001e\u0085\u00ebQ8\u0016\u00c0\u0019\u0004V\u000e-r\"\u00c0\u0015\u00aeG\u00e1z\u0094,\u00c0\n\u00d7\u00a3p=\n\u0017\u00c0J\f\u0002+\u0087\u00d6!\u00c0H\u00e1z\u0014\u00ae\u00a72\u00c0Q\u008d\u0097n\u0012\u0083\u0016\u00c0Nb\u0010X9\u00f4\"\u00c0w\u00be\u009f\u001a/=3\u00c0u\u0093\u0018\u0004V\u008e\u0013\u00c0\f\u0002+\u0087\u0016\u00d9 \u00c0`\u00e5\u00d0\"\u00dbY3\u00c0#\u00db\u00f9~j<\u0019\u00c0F\u00b6\u00f3\u00fd\u00d4x\u001f\u00c0\u00d3Mb\u0010X\u00d91\u00c0\u007fj\u00bct\u0093\u0098\u0013\u00c0\u00cf\u00f7S\u00e3\u00a5[ \u00c0\u00f2\u00d2Mb\u0010\u00981\u00c0\u00f4\u00fd\u00d4x\u00e9&\u000f\u00c0F\u00b6\u00f3\u00fd\u00d4\u00f8\u001b\u00c0$\u00db\u00f9~j|2\u00c0L7\u0089A`e\u0013\u00c0\u00c9v\u00be\u009f\u001a\u00af#\u00c0S\u00b8\u001e\u0085\u00ebQ-\u00c00\u00dd$\u0006\u0081\u0095\u001f\u00c0\u00fe\u00d4x\u00e9&\u00f1#\u00c0\u0015\u00aeG\u00e1z\u00d4.\u00c0\u00e2z\u0014\u00aeG!!\u00c0\u00da\u00ce\u00f7S\u00e3%%\u00c0\u0091\u00ed|?5\u00de*\u00c0\u0089A`\u00e5\u00d0\" \u00c0;\u00dfO\u008d\u0097n&\u00c0b\u0010X9\u00b4\u0088*\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u001c\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\f'\u00c0\u009b\u0099\u0099\u0099\u0099\u0019+\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\"\u00c0\u00dfO\u008d\u0097nR#\u00c0\u008bl\u00e7\u00fb\u00a9q(\u00c0\u00b4\u00c8v\u00be\u009fZ \u00c0\u0000\u0000\u0000\u0000\u0000\u0080\"\u00c0P\u008d\u0097n\u0012C(\u00c0\u00d4Mb\u0010X\u00b9\u001c\u00c0T\u00e3\u00a5\u009b\u00c4\u00e0!\u00c0|\u0014\u00aeG\u00e1z(\u00c0X9\u00b4\u00c8v\u00fe!\u00c0\u0088\u0016\u00d9\u00ce\u00f7S&\u00c0\u00e9&1\b\u00ac\u001c,\u00c0\u001eZd;\u00df\u00cf$\u00c0\u008e\u0097n\u0012\u0083\u0000%\u00c0u\u0093\u0018\u0004V\u00ce%\u00c0\u00a4p=\n\u00d7\u00e3 \u00c0\u00fc\u00a9\u00f1\u00d2Mb&\u00c0gfffff%\u00c0u\u0093\u0018\u0004V\u008e\u001e\u00c0~?5^\u00ba\t&\u00c0\u00b8\u001e\u0085\u00ebQ\u00f8%\u00c0%\u0006\u0081\u0095C\u00cb\"\u00c0|\u0014\u00aeG\u00e1\u00ba\"\u00c0\u00f2\u00d2Mb\u0010\u00d8\"\u00c0\u0014\u00aeG\u00e1z\u00d4 \u00c0\u00fe\u00d4x\u00e9&q\"\u00c0\u00aeG\u00e1z\u0014n\"\u00c0\u008cl\u00e7\u00fb\u00a9q\u001a\u00c0\u00f0\u00a7\u00c6K7I#\u00c0\u0086\u00ebQ\u00b8\u001eE$\u00c0B`\u00e5\u00d0\"\u00db\u0018\u00c0J\f\u0002+\u0087V \u00c0\u00a6\u009b\u00c4 \u00b02\"\u00c0\u00f2\u00d2Mb\u0010X\u0019\u00c0\u00db\u00f9~j\u00bct#\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\u008d \u00c0\u00b6\u00f3\u00fd\u00d4xi\u0019\u00c0Y9\u00b4\u00c8v~)\u00c0\u000f-\u00b2\u009d\u00ef'*\u00c0y\u00e9&1\bl\"\u00c0\u001c/\u00dd$\u0006\u0001*\u00c0\u00de$\u0006\u0081\u0095C)\u00c0\u00c9v\u00be\u009f\u001a\u00af \u00c0\u00f2\u00d2Mb\u0010\u00d8+\u00c0\u008e\u0097n\u0012\u0083\u00c0*\u00c0\b\u00ac\u001cZd\u00fb#\u00c0z\u00e9&1\bl+\u00c0c\u0010X9\u00b4\u0088,\u00c0\u00b6\u00f3\u00fd\u00d4x)%\u00c0%\u0006\u0081\u0095C\u008b-\u00c0\u00a0\u001a/\u00dd$F+\u00c0#\u00db\u00f9~j\u00bc\"\u00c0\u00cav\u00be\u009f\u001a\u00af,\u00c0\u00aeG\u00e1z\u0014\u00ae(\u00c0Zd;\u00dfO\r&\u00c0\u0019\u0004V\u000e-r+\u00c0Zd;\u00dfO\u008d&\u00c0T\u00e3\u00a5\u009b\u00c4`&\u00c0y\u00e9&1\b\u00ec.\u00c0\u00a4p=\n\u00d7#)\u00c0\u00ecQ\u00b8\u001e\u0085k'\u00c0\u00f0\u00a7\u00c6K7\u00c9/\u00c0*\\\u008f\u00c2\u00f5\u00e8*\u00c0^\u00baI\f\u0002\u00eb&\u00c0\u00dfO\u008d\u0097n\u00d2/\u00c0ffffff'\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8)\u00c0\u00c9v\u00be\u009f\u001a/.\u00c0\u00f6(\\\u008f\u00c2\u00f5&\u00c0S\u00b8\u001e\u0085\u00eb\u0011+\u00c0\u0084\u00c0\u00ca\u00a1EV0\u00c0\u0002+\u0087\u0016\u00d9\u008e$\u00c0}?5^\u00ba\u00c9(\u00c0\b\u00ac\u001cZd\u001b1\u00c0\u00bbI\f\u0002+\u00c7(\u00c0`\u00e5\u00d0\"\u00db9+\u00c0\f\u0002+\u0087\u0016\u00f91\u00c0\u001c/\u00dd$\u0006\u0001)\u00c0\u00aeG\u00e1z\u0014\u00ee)\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a50\u00c033333\u00b3*\u00c0\u00db\u00f9~j\u00bc\u00b4+\u00c0/\u00dd$\u0006\u0081U0\u00c0\u00a0\u001a/\u00dd$\u00c6\"\u00c0\u0086\u00ebQ\u00b8\u001e\u0085*\u00c0fffff\u00a61\u00c0\u007fj\u00bct\u0093\u0098'\u00c0\u001f\u0085\u00ebQ\u00b8\u00de-\u00c0\u00b8\u001e\u0085\u00ebQ\u00d80\u00c0J\f\u0002+\u0087V'\u00c0[d;\u00dfOM/\u00c0\u00d2\"\u00db\u00f9~*2\u00c0!\u00b0rh\u0091\u00ad%\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5-\u00c0\u008f\u00c2\u00f5(\\\u008f2\u00c0\u00bdt\u0093\u0018\u0004\u0096)\u00c0\u00db\u00f9~j\u00bc4/\u00c0\u00be\u009f\u001a/\u00dd$3\u00c033333s*\u00c0S\u00b8\u001e\u0085\u00eb\u0091-\u00c0\u00b4\u00c8v\u00be\u009f\u00fa1\u00c0\u00dd$\u0006\u0081\u0095C+\u00c0P\u008d\u0097n\u0012\u00030\u00c0\u00d7\u00a3p=\nw3\u00c0\u00b0rh\u0091\u00ed<(\u00c0'1\b\u00ac\u001c\u009a0\u00c0j\u00bct\u0093\u0018$4\u00c0Zd;\u00dfO\r'\u00c0-\u00b2\u009d\u00ef\u00a7&0\u00c0\u0081\u0095C\u008bl\u00c72\u00c0\u0000\u0000\u0000\u0000\u0000\u00c0)\u00c0\u00ac\u001cZd;\u009f2\u00c0\u009a\u0099\u0099\u0099\u0099\u00f91\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5*\u00c0Nb\u0010X942\u00c0\u00ac\u001cZd;\u001f3\u00c0\u00b6\u00f3\u00fd\u00d4x)*\u00c0\u00ecQ\u00b8\u001e\u0085\u008b3\u00c0\f\u0002+\u0087\u0016y4\u00c0\u00fc\u00a9\u00f1\u00d2M\"'\u00c0\u001f\u0085\u00ebQ\u00b8~2\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u008d4\u00c0\u00fa~j\u00bctS'\u00c0sh\u0091\u00ed|\u007f3\u00c0\u0014\u00aeG\u00e1z45\u00c0\u00aa\u00f1\u00d2Mb\u0010&\u00c0\u0002+\u0087\u0016\u00d9\u000e2\u00c07\u0089A`\u00e5\u00903\u00c0o\u0012\u0083\u00c0\u00caa(\u00c0\u0000\u0000\u0000\u0000\u0000\u00e01\u00c0z\u00e9&1\b\u00ac0\u00c0\u00a4p=\n\u00d7#$\u00c0\u008e\u0097n\u0012\u0083@&\u00c0\u009a\u0099\u0099\u0099\u0099\u00d90\u00c0\u0090\u00c2\u00f5(\\\u00cf%\u00c0\u00da\u00ce\u00f7S\u00e3%%\u00c0fffff\u00061\u00c0\u0000\u0000\u0000\u0000\u0000\u0080!\u00c0\u009c\u00c4 \u00b0r(%\u00c043333s1\u00c0\u00e3\u00a5\u009b\u00c4 0 \u00c0\u00ecQ\u00b8\u001e\u0085\u00ab&\u00c0&\u0006\u0081\u0095C\u008b/\u00c0\u00ef|?5^\u00ba\u001f\u00c0B`\u00e5\u00d0\"[$\u00c0q=\n\u00d7\u00a3\u00f01\u00c0\u00fa~j\u00bct\u0093!\u00c0H\u00e1z\u0014\u00ae\u00c7\"\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\r2\u00c0th\u0091\u00ed|?\u001f\u00c0/\u00dd$\u0006\u0081\u00d5!\u00c0\u00c7K7\u0089A\u00e02\u00c0\u00a8\u00c6K7\u0089\u0081\"\u00c0\u008bl\u00e7\u00fb\u00a9q#\u00c0\u0017\u00d9\u00ce\u00f7S\u00a3/\u00c0\u00e2z\u0014\u00aeG\u00e1\u001a\u00c0\u00be\u009f\u001a/\u00dd$$\u00c0\u008d\u0097n\u0012\u0083\u00801\u00c0!\u00b0rh\u0091-#\u00c0\u00e5\u00d0\"\u00db\u00f9\u00be \u00c0h\u0091\u00ed|?\u00b51\u00c0q=\n\u00d7\u00a30\"\u00c0\u0087\u0016\u00d9\u00ce\u00f7S\u001e\u00c0\u00c2\u00ca\u00a1E\u00b63-\u00c0=\n\u00d7\u00a3p\u00fd \u00c0\u00d8\u00a3p=\nW$\u00c0333333-\u00c0j\u00bct\u0093\u0018\u0004#\u00c0R\u00b8\u001e\u0085\u00ebQ$\u00c0\u00ecQ\u00b8\u001e\u0085\u00ab*\u00c0\u0007\u0081\u0095C\u008bl\u001f\u00c0\u001a\u0004V\u000e-r#\u00c0\u0082\u0095C\u008bl\u00e7*\u00c0=\n\u00d7\u00a3p=\u001d\u00c0\u00e0O\u008d\u0097n\u0092!\u00c0\u008aA`\u00e5\u00d0b)\u00c0\u001f\u0085\u00ebQ\u00b8^!\u00c09\u00b4\u00c8v\u00be\u00df\"\u00c0\u001b/\u00dd$\u0006\u0081)\u00c0|\u0014\u00aeG\u00e1z\u001b\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u008c%\u00c0\u00f0\u00a7\u00c6K7I'\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u0019\u00c0\u0086\u00ebQ\u00b8\u001eE%\u00c0\u00d2\"\u00db\u00f9~\u00ea*\u00c0\u00d4Mb\u0010X9\u001a\u00c0y\u00e9&1\b\u00ac'\u00c0\u00bct\u0093\u0018\u0004\u00d6,\u00c0a\u00e5\u00d0\"\u00dby\u001b\u00c0\u00fa~j\u00bct\u00d3'\u00c0`\u00e5\u00d0\"\u00db\u00b9)\u00c0\u00e6\u00d0\"\u00db\u00f9~\u0017\u00c0)\\\u008f\u00c2\u00f5(*\u00c00\u00dd$\u0006\u0081U(\u00c0\r\u0002+\u0087\u0016Y\u001a\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u000b+\u00c0\u00fd\u00a9\u00f1\u00d2M\u00e2'\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0012\u00c0)\\\u008f\u00c2\u00f5()\u00c0\u009e\u00ef\u00a7\u00c6K\u00f7+\u00c0R\u00b8\u001e\u0085\u00ebQ\u0016\u00c0\u00e3\u00a5\u009b\u00c4 0,\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u008d-\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u0013\u00c0\u00fe\u00d4x\u00e9&q+\u00c0\u001c/\u00dd$\u0006\u00c1,\u00c07\u0089A`\u00e5\u00d0\u0019\u00c0\u00e5\u00d0\"\u00db\u00f9>-\u00c0\u00f0\u00a7\u00c6K7\t+\u00c0\n\u00d7\u00a3p=\n\u0014\u00c0\u008f\u00c2\u00f5(\\\u00cf-\u00c0\u00baI\f\u0002+\u0087%\u00c0{\u0014\u00aeG\u00e1z\u0012\u00c0\u001eZd;\u00df\u00cf)\u00c0\"\u00b0rh\u0091\u00ed(\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\r\u00c0\u00c1\u00ca\u00a1E\u00b6\u00b3'\u00c0\u0082\u0095C\u008bl\u00e7*\u00c0\u00a0\u001a/\u00dd$\u0006\u000e\u00c0\u001eZd;\u00dfO'\u00c0\u00e6\u00d0\"\u00db\u00f9~'\u00c0\n\u00d7\u00a3p=\n\u0004\u00c0\u0091\u00ed|?5\u00de&\u00c0\b\u00ac\u001cZd\u00bb&\u00c0d;\u00dfO\u008d\u0097\u0000\u00c0G\u00b6\u00f3\u00fd\u00d4\u00b8(\u00c0\u0010X9\u00b4\u00c8v%\u00c0x\u00be\u009f\u001a/\u00dd\u0005\u00c0{\u0014\u00aeG\u00e1\u00ba$\u00c0\u0000\u0000\u0000\u0000\u0000\u00c0)\u00c0ffffff\u00f8\u00bf\u0084\u00c0\u00ca\u00a1E\u00b6%\u00c0\u00bf\u009f\u001a/\u00dd\u00a4*\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u00ff\u00bf+\u0087\u0016\u00d9\u00ce\u00f7#\u00c0u\u0093\u0018\u0004VN#\u00c0`\u00e5\u00d0\"\u00db\u00f9\u0000\u00c06^\u00baI\f\u00c2$\u00c0x\u00be\u009f\u001a/](\u00c0S\u00b8\u001e\u0085\u00ebQ\u00c8\u00bf$\u00db\u00f9~j\u00fc$\u00c0'1\b\u00ac\u001cZ'\u00c0u\u0093\u0018\u0004V\u000e\u00cd?\u0083\u00c0\u00ca\u00a1E\u00b6&\u00c0d;\u00dfO\u008d\u0017*\u00c0\u0092\u00ed|?5^\u00da?\u00a4p=\n\u00d7c$\u00c0\u00cf\u00f7S\u00e3\u00a5\u001b'\u00c0%\u0006\u0081\u0095C\u008b\u00cc\u00bf\u00c2\u00ca\u00a1E\u00b63#\u00c0\u00f7(\\\u008f\u00c2\u00b5+\u00c0y\u00e9&1\b\u00ac\u00f4\u00bf\u00db\u00f9~j\u00bc\u00b4'\u00c0\u0012\u0083\u00c0\u00ca\u00a1\u0085,\u00c0=\n\u00d7\u00a3p=\u0001\u00c0\u0019\u0004V\u000e-\u00f2'\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3%\u00c0:\u00b4\u00c8v\u00be\u009f\r\u00c0T\u00e3\u00a5\u009b\u00c4\u00e0\"\u00c0\u0000\u0000\u0000\u0000\u0000\u0080'\u00c0\u008e\u0097n\u0012\u0083@\u0011\u00c0\u00e9&1\b\u00ac\u00dc\"\u00c0=\n\u00d7\u00a3p\u00fd#\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M\u0010\u00c0D\u008bl\u00e7\u00fb\u00a9 \u00c0^\u00baI\f\u0002k#\u00c0\u00ea&1\b\u00ac\u001c\t\u00c0\u0081\u0095C\u008blg\u001f\u00c0P\u008d\u0097n\u0012\u0083!\u00c0\u00cb\u00a1E\u00b6\u00f3}\u0012\u00c0\u0014\u00aeG\u00e1z\u0014\"\u00c0)\\\u008f\u00c2\u00f5h%\u00c0\\\u008f\u00c2\u00f5(\\\u0014\u00c06^\u00baI\f\u0082\u001d\u00c0L7\u0089A`%$\u00c0\u00d5x\u00e9&1\u0088\u0015\u00c0E\u008bl\u00e7\u00fb)\u001a\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc%\u00c0\u0001\u0000\u0000\u0000\u0000\u0000\u0018\u00c0\u008e\u0097n\u0012\u0083\u00c0\u001f\u00c0V\u000e-\u00b2\u009do\u001e\u00c0\u00c9v\u00be\u009f\u001a\u00af\u0010\u00c0\u00f8S\u00e3\u00a5\u009b\u0084!\u00c0\u009a\u0099\u0099\u0099\u0099\u00d9'\u00c0\u00b8\u001e\u0085\u00ebQ8\u0012\u00c0\u00e0O\u008d\u0097n\u0092\u001b\u00c0*\\\u008f\u00c2\u00f5h(\u00c0\u00b5\u00c8v\u00be\u009f\u001a\u0014\u00c0\u00dc\u00f9~j\u00bct\u0018\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2!\u00c0d;\u00dfO\u008d\u0017\u0016\u00c0\u00a8\u00c6K7\u0089\u0001$\u00c0\u00cb\u00a1E\u00b6\u00f3\u00bd#\u00c0{\u0014\u00aeG\u00e1\u00fa\u0016\u00c0\u0010X9\u00b4\u00c8v$\u00c0\r\u0002+\u0087\u0016Y\u001f\u00c0\u00d8\u00a3p=\nW\u0018\u00c0n\u00e7\u00fb\u00a9\u00f1\u0092%\u00c0Nb\u0010X94\u001c\u00c0\u00e6\u00d0\"\u00db\u00f9\u00fe\u0019\u00c0\u001dZd;\u00dfO$\u00c0\"\u00b0rh\u0091m\u001c\u00c0\u0086\u00ebQ\u00b8\u001e\u0005\u0014\u00c0\u001a\u0004V\u000e-2'\u00c0d;\u00dfO\u008d\u00d7 \u00c0\u00e5\u00d0\"\u00db\u00f9\u00fe\u001c\u00c0\b\u00ac\u001cZd;'\u00c0sh\u0091\u00ed|?\"\u00c0\u00f1\u00a7\u00c6K7\u0089\u001b\u00c0+\u0087\u0016\u00d9\u00ce\u00b7(\u00c0\u00fe\u00d4x\u00e9&\u00f1!\u00c0\u0086\u00ebQ\u00b8\u001e\u0085\u001f\u00c0\u00aa\u00f1\u00d2Mb\u00d0%\u00c0)\\\u008f\u00c2\u00f5\u00a8\u0017\u00c0=\n\u00d7\u00a3p\u00bd\u0013\u00c0@5^\u00baIL'\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u001d\u00c0T\u00e3\u00a5\u009b\u00c4 \u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u008c(\u00c0\u00f8S\u00e3\u00a5\u009bD\u001a\u00c0]\u008f\u00c2\u00f5(\u00dc\u001d\u00c0\u00dc\u00f9~j\u00bct)\u00c0}?5^\u00baI\u001b\u00c0\u00c7K7\u0089A`!\u00c0\u00d8\u00a3p=\n\u0017'\u00c0 \u0085\u00ebQ\u00b8\u009e\u001f\u00c0\u00e9&1\b\u00ac\u001c\"\u00c0*\\\u008f\u00c2\u00f5\u00a8*\u00c0\u00d3Mb\u0010X9\u001c\u00c0H\u00e1z\u0014\u00ae\u0007#\u00c0\"\u00b0rh\u0091\u00ad+\u00c0\u00ee|?5^\u00ba \u00c0\u00f0\u00a7\u00c6K7\t!\u00c0\u00fa~j\u00bctS,\u00c0^\u00baI\f\u0002\u00ab!\u00c0X9\u00b4\u00c8v\u00fe#\u00c0\u0011X9\u00b4\u00c8v)\u00c0H\u00e1z\u0014\u00ae\u0087#\u00c0\u00b0rh\u0091\u00ed|#\u00c0\u00da\u00ce\u00f7S\u00e3\u00e5(\u00c0\u00da\u00ce\u00f7S\u00e3%\u001e\u00c0\u0002+\u0087\u0016\u00d9\u008e'\u00c0v\u0093\u0018\u0004V\u008e(\u00c0\u00c6 \u00b0rh\u0091\u001d\u00c0\u001a\u0004V\u000e-2)\u00c0\u000e-\u00b2\u009d\u00efg'\u00c0J\f\u0002+\u0087\u0016\u001b\u00c0\u00d3Mb\u0010X\u00f9&\u00c0+\u0087\u0016\u00d9\u00ce\u00b7)\u00c0\u0012\u0083\u00c0\u00ca\u00a1E#\u00c0:\u00b4\u00c8v\u00be\u009f'\u00c0~?5^\u00baI'\u00c0>\n\u00d7\u00a3p\u00fd\"\u00c0o\u0012\u0083\u00c0\u00caa)\u00c0\f\u0002+\u0087\u0016Y&\u00c0$\u00db\u00f9~j\u00fc$\u00c0\u0014\u00aeG\u00e1z\u0094&\u00c0@5^\u00baIL'\u00c0\n\u00d7\u00a3p=J!\u00c0\u00aeG\u00e1z\u0014n&\u00c0H\u00e1z\u0014\u00ae\u0087(\u00c0.\u00b2\u009d\u00ef\u00a7F\u001f\u00c0}?5^\u00baI\u0010\u00c0\u00aeG\u00e1z\u0014n(\u00c0p\u0012\u0083\u00c0\u00ca\u00a1!\u00c0H\u00e1z\u0014\u00ae\u00c7\u0010\u00c0\u00e5\u00d0\"\u00db\u00f9>(\u00c0Ob\u0010X94\u001d\u00c0\u00aa\u00f1\u00d2Mb\u0010\u0007\u00c0\u0015\u00aeG\u00e1z\u00d4)\u00c0\u001eZd;\u00df\u00cf\u001a\u00c0\u001f\u0085\u00ebQ\u00b8\u001e\n\u00c0\u00d4Mb\u0010Xy+\u00c0\u001c/\u00dd$\u0006\u0001\u001a\u00c0\u00bct\u0093\u0018\u0004V\u0000\u00c0\u0083\u00c0\u00ca\u00a1E\u00f6'\u00c0\u009a\u0099\u0099\u0099\u0099\u0019!\u00c0\u0010X9\u00b4\u00c8v\u0000\u00c06^\u00baI\f\u0002+\u00c0d;\u00dfO\u008d\u0097\"\u00c0x\u00be\u009f\u001a/\u00dd\u0005\u00c09\u00b4\u00c8v\u00be\u00df+\u00c0+\u0087\u0016\u00d9\u00ce7\"\u00c0\u0099n\u0012\u0083\u00c0\u00ca\u00f7\u00bf\u00a1\u001a/\u00dd$\u0086)\u00c09\u00b4\u00c8v\u00be\u009f\u0015\u00c0\u0080j\u00bct\u0093\u0018\u00fa\u00bf]\u008f\u00c2\u00f5(\u009c(\u00c0\u00a2E\u00b6\u00f3\u00fdT \u00c0J\f\u0002+\u0087\u0016\u00f1\u00bf\u00cc\u00a1E\u00b6\u00f3=-\u00c0#\u00db\u00f9~j\u00fc!\u00c0\b\u00ac\u001cZd;\u00d7\u00bf+\u0087\u0016\u00d9\u00cew-\u00c0\u00b9\u001e\u0085\u00ebQ8\u001d\u00c0%\u0006\u0081\u0095C\u008b\u00dc\u00bf#\u00db\u00f9~j\u00bc,\u00c0\u0090\u00c2\u00f5(\\\u008f\u001f\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u00fd\u00bf\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc/\u00c0=\n\u00d7\u00a3p=!\u00c0)\\\u008f\u00c2\u00f5(\u0005\u00c0^\u00baI\f\u0002+0\u00c0R\u00b8\u001e\u0085\u00eb\u00d1\u001b\u00c0\u00c9v\u00be\u009f\u001a/\u0003\u00c0\u00b0rh\u0091\u00ed|/\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u001e\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u00f0\u00bf\u00ac\u001cZd;\u001f1\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5\u001c\u00c0\r\u0002+\u0087\u0016\u00d9\u00f6\u00bf\u00ee|?5^\u00fa1\u00c0%\u0006\u0081\u0095C\u008b\u001c\u00c0\u00ea&1\b\u00ac\u001c\u00ba\u00bf/\u00dd$\u0006\u0081\u00f50\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u000b\"\u00c0z\u00e9&1\b\u00ac\u00e0\u00bf\u008f\u00c2\u00f5(\\\u00af1\u00c0Nb\u0010X9t#\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u00f3\u00bf\u00aa\u00f1\u00d2Mb\u00d01\u00c0\u00cav\u00be\u009f\u001a\u00af\"\u00c0\u00f7(\\\u008f\u00c2\u00f5\u00c8?\u0098n\u0012\u0083\u00c0\n1\u00c0sh\u0091\u00ed|\u00bf!\u00c0K\f\u0002+\u0087\u0016\u00b9\u00bf/\u00dd$\u0006\u0081\u00952\u00c0Ob\u0010X9\u00b4\u001b\u00c0L7\u0089A`\u00e5\u00fc\u00bf\u00ce\u00cc\u00cc\u00cc\u00cc\u008c%\u00c0p\u0012\u0083\u00c0\u00ca!\u001f\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u0002\u00c0/\u00dd$\u0006\u0081\u0015%\u00c0\n\u00d7\u00a3p=\n\u0019\u00c0b\u0010X9\u00b4\u00c8\u00f0\u00bf\u00aa\u00f1\u00d2Mb\u0090#\u00c0\t\u00ac\u001cZd\u00bb\u0017\u00c0\u00db\u00f9~j\u00bct\u00b3\u00bf\u0014\u00aeG\u00e1zT$\u00c0h\u0091\u00ed|?\u00b5\u0013\u00c0\u00bct\u0093\u0018\u0004V\u00fa\u00bf\u00fe\u00d4x\u00e9&\u00b1\"\u00c0\u009c\u00c4 \u00b0rh\u001c\u00c0\u0004V\u000e-\u00b2\u009d\u00e7\u00bfr=\n\u00d7\u00a30!\u00c0\u00baI\f\u0002+\u0007 \u00c0F\u00b6\u00f3\u00fd\u00d4x\u00d1\u00bf\u00b6\u00f3\u00fd\u00d4x\u00e9!\u00c0\u00b8\u001e\u0085\u00ebQ8\u001a\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u00b3\u00bf\u00aeG\u00e1z\u0014\u00ae\u001f\u00c0\u00a5p=\n\u00d7\u00a3\u001d\u00c0\u008bl\u00e7\u00fb\u00a9\u00f1\u00fa\u00bf\u00e7\u00fb\u00a9\u00f1\u00d2M \u00c0\u009f\u00ef\u00a7\u00c6K7\u000f\u00c0R\u00b8\u001e\u0085\u00ebQ\u00f0\u00bf\u0017\u00d9\u00ce\u00f7S\u00e3\"\u00c0\u00a0\u001a/\u00dd$\u0086\u0013\u00c0\u00a5p=\n\u00d7\u00a3\u0007\u00c0J\f\u0002+\u0087V\"\u00c0>\n\u00d7\u00a3p\u00bd\u0016\u00c0,\u0087\u0016\u00d9\u00ce\u00f7\u000b\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\"\u00c0\u008d\u0097n\u0012\u0083\u00c0\f\u00c0333333\u000e\u00c0\u00c1\u00ca\u00a1E\u00b6\u00b3!\u00c0\u00f6(\\\u008f\u00c2\u00f5\t\u00c0G\u00b6\u00f3\u00fd\u00d4x\f\u00c0\r\u0002+\u0087\u0016Y\u001f\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0003\u00c0\u0097C\u008bl\u00e7\u00fb\f\u00c0\u00bct\u0093\u0018\u0004\u00d6#\u00c0+\u0087\u0016\u00d9\u00cew\u0010\u00c0\u0010X9\u00b4\u00c8\u00f6\u0014\u00c0\u00fa~j\u00bctS!\u00c0~?5^\u00baI\u0012\u00c0\u00b8\u001e\u0085\u00ebQ8\u0016\u00c0\u00c2\u00ca\u00a1E\u00b63#\u00c0\u0010X9\u00b4\u00c8\u00f6\u0013\u00c0\u0015\u00aeG\u00e1z\u0014\u0015\u00c0\n\u00d7\u00a3p=\n \u00c0!\u00b0rh\u0091\u00ed\u00f4\u00bfq=\n\u00d7\u00a3p\u000b\u00c0\u0080j\u00bct\u0093\u0018#\u00c0\u0099n\u0012\u0083\u00c0\u00ca\u0007\u00c0\u0014\u00aeG\u00e1z\u0014\u0019\u00c0\b\u00ac\u001cZd\u00bb \u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u0001\u00c0\u00c9v\u00be\u009f\u001a/\u0019\u00c0H\u00e1z\u0014\u00aeG\"\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u0001\u00c07\u0089A`\u00e5P\u0018\u00c0L7\u0089A`\u00e5\u001b\u00c0\u0001\u0000\u0000\u0000\u0000\u0000\u0007\u00c0?5^\u00baI\f\u0018\u00c0\u00e2z\u0014\u00aeGa\u0018\u00c0\u00aa\u00f1\u00d2Mb\u0010\u00f8\u00bf\u0082\u0095C\u008blg\u001b\u00c0U\u00e3\u00a5\u009b\u00c4\u00a0\u001a\u00c0\u0013\u0083\u00c0\u00ca\u00a1E\u00fa\u00bfe;\u00dfO\u008d\u0097\u0014\u00c0\u0090\u00c2\u00f5(\\\u000f\u001c\u00c0\u00dd$\u0006\u0081\u0095C\f\u00c0Y9\u00b4\u00c8v\u00be\u001e\u00c0H\u00e1z\u0014\u00ae\u00c7 \u00c0}?5^\u00baI\u0010\u00c0\u00b1rh\u0091\u00ed\u00fc\u001f\u00c0\u00fa~j\u00bct\u0093\"\u00c0+\u0087\u0016\u00d9\u00ce\u00f7\u0005\u00c0J\f\u0002+\u0087\u00d6 \u00c0\u00fa~j\u00bct\u0093 \u00c0V\u000e-\u00b2\u009d\u00ef\u0010\u00c0\u0099n\u0012\u0083\u00c0J\u001f\u00c0\u00ce\u00cc\u00cc\u00cc\u00ccL\u001e\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5\u0006\u00c08\u0089A`\u00e5\u00d0\f\u00c0\u00cav\u00be\u009f\u001ao&\u00c0\u00c8K7\u0089A`\u000e\u00c0\u0084\u00c0\u00ca\u00a1E\u00b6\u000e\u00c0\u00ea&1\b\u00ac\u00dc&\u00c0\u00b7\u00f3\u00fd\u00d4x\u00e9\u00fe\u00bf\u0012\u0083\u00c0\u00ca\u00a1E\u000b\u00c0c\u0010X9\u00b4\u00c8(\u00c0\u00be\u009f\u001a/\u00dd$\u00f0\u00bf\u009d\u00c4 \u00b0rh\u000f\u00c0Y9\u00b4\u00c8v>(\u00c0P\u008d\u0097n\u0012\u0083\u00f8\u00bfU\u00e3\u00a5\u009b\u00c4 \u00fe\u00bf\u00bf\u009f\u001a/\u00dd$)\u00c0\u0004V\u000e-\u00b2\u009d\u0004\u00c0\u00f6(\\\u008f\u00c2\u00f5\u000e\u00c0L7\u0089A`e+\u00c0\u00e4\u00a5\u009b\u00c4 \u00b0\f\u00c0\u00f1\u00a7\u00c6K7\u0089\u000b\u00c0\u001c/\u00dd$\u0006\u0081+\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M\u0006\u00c0h\u0091\u00ed|?\u00b5\u0013\u00c0;\u00dfO\u008d\u0097.+\u00c0*\\\u008f\u00c2\u00f5(\u00dc\u00bf\u00c9v\u00be\u009f\u001a/\u00f9\u00bf\u00a8\u00c6K7\u0089\u0001*\u00c0\u00bdt\u0093\u0018\u0004V\u00fc\u00bf\u00d3Mb\u0010X9\f\u00c0\u00fd\u00a9\u00f1\u00d2M\u00e2-\u00c0\u001a\u0004V\u000e-\u00b2\u00f9\u00bf\u000e-\u00b2\u009d\u00ef\u00a7\u0003\u00c0\u008aA`\u00e5\u00d0\".\u00c0~?5^\u00baI\u0002\u00c0\u00fb~j\u00bct\u0093\u000f\u00c0\u00f2\u00d2Mb\u0010\u0098/\u00c0\u001c/\u00dd$\u0006\u0081\u00d5\u00bfj\u00bct\u0093\u0018\u0084\u0010\u00c0\u00bbI\f\u0002+\u00c7-\u00c0Zd;\u00dfO\u008d\u00b7\u00bfffffff\u0014\u00c0\u008f\u00c2\u00f5(\\O,\u00c0\u001b/\u00dd$\u0006\u0081\u00dd?\u00e8\u00fb\u00a9\u00f1\u00d2M\r\u00c0\u00ecQ\u00b8\u001e\u0085k/\u00c0'1\b\u00ac\u001cZ\u0003\u00c0\u00c7K7\u0089A`\u00ed\u00bf\u008cl\u00e7\u00fb\u00a9\u00b1(\u00c0\u0092\u00ed|?5^\n\u00c09\u00b4\u00c8v\u00be\u009f\u00f4\u00bf\u00c3\u00f5(\\\u008f\u0002(\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u0000\u00c0\u00fa~j\u00bct\u0093\u00e0?z\u00e9&1\b\u00ec(\u00c0\u0085\u00ebQ\u00b8\u001e\u0085\u00f7\u00bf'1\b\u00ac\u001cZ\u00e8?\u009d\u00c4 \u00b0r\u00a8*\u00c0#\u00db\u00f9~j\u00bc\u00f2\u00bf\u00f7(\\\u008f\u00c2\u00f5\u00ec?\u00dd$\u0006\u0081\u0095\u0083&\u00c0d;\u00dfO\u008d\u0097\u000b\u00c0\u00f4\u00fd\u00d4x\u00e9&\u00f5?\u0015\u00aeG\u00e1z\u00d4(\u00c0C`\u00e5\u00d0\"\u00db\u000f\u00c0)\\\u008f\u00c2\u00f5(\u00f2?\u0010X9\u00b4\u00c8\u00f6&\u00c0\u0087\u0016\u00d9\u00ce\u00f7S\u00d3\u00bf\u00afG\u00e1z\u0014\u00ae\u00fb?\u009d\u00c4 \u00b0r\u00e8&\u00c0\f\u0002+\u0087\u0016\u00d9\b\u00c0\u00b0rh\u0091\u00ed|\u0006@\u00fe\u00d4x\u00e9&1)\u00c0d;\u00dfO\u008d\u0097\u0005\u00c0\u0096C\u008bl\u00e7\u00fb\b@\u001b/\u00dd$\u0006A'\u00c0\u00aeG\u00e1z\u0014\u00ae\u000f\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u000b@\u000b\u00d7\u00a3p=\u00ca)\u00c0\u00aa\u00f1\u00d2Mb\u0010\u0002\u00c0\u00aeG\u00e1z\u0014\u00ae\u0007@\u00c3\u00f5(\\\u008f\u0082*\u00c0\u0091\u00ed|?5\u00de\u0011\u00c0\u00afG\u00e1z\u0014\u00ae\u00eb?\u0011X9\u00b4\u00c8\u00b6*\u00c0\u00d9\u00ce\u00f7S\u00e3%\u0013\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u0090\u00bf\u00d5x\u00e9&1H*\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u00f4\u00bf\u00ecQ\u00b8\u001e\u0085\u00eb\u00d1?\u00da\u00ce\u00f7S\u00e3%$\u00c0\u00b2\u009d\u00ef\u00a7\u00c6K\u0000\u00c0\u00edQ\u00b8\u001e\u0085\u00eb\u00d9\u00bf\u00a4p=\n\u00d7#$\u00c0\u00a7\u009b\u00c4 \u00b0r\u00d8\u00bf(1\b\u00ac\u001cZ\u00e0?d;\u00dfO\u008d\u0017\"\u00c0\u00d1\"\u00db\u00f9~j\u00bc\u00bf\u00a0\u001a/\u00dd$\u0006\u00f9?h\u0091\u00ed|?\u00f5!\u00c0\u0007\u0081\u0095C\u008bl\u00ef?\u00cf\u00f7S\u00e3\u00a5\u009b\u00c4\u00bfNb\u0010X9\u00b4\"\u00c0\u00a8\u00c6K7\u0089A\u00ec\u00bf\u0089A`\u00e5\u00d0\"\u00ab\u00bf\u00d3Mb\u0010X\u00b9\u001e\u00c0\u00bbI\f\u0002+\u0087\u0096\u00bf\u00a8\u00c6K7\u0089A\u00d0\u00bf\u00aeG\u00e1z\u0014.\u001c\u00c0\u00c3\u00f5(\\\u008f\u00c2\u00f5\u00bf\u00fc\u00a9\u00f1\u00d2Mb\u00f0\u00bf\u00b8\u001e\u0085\u00ebQ8\u001f\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u00fe?-\u00b2\u009d\u00ef\u00a7\u00c6\u00cb?\u00c3\u00f5(\\\u008fB!\u00c0n\u00e7\u00fb\u00a9\u00f1\u00d2\u00fb\u00bfj\u00bct\u0093\u0018\u0004\u00ee?W\u000e-\u00b2\u009do\u001b\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\u0005\u00c0R\u00b8\u001e\u0085\u00ebQ\u00f0?U\u00e3\u00a5\u009b\u00c4 \u001d\u00c0K\f\u0002+\u0087\u0016\u00ff\u00bf5^\u00baI\f\u0002\u00d3?\u00a1\u001a/\u00dd$\u0006\u0016\u00c0\u008cl\u00e7\u00fb\u00a9\u00f1\u00ee\u00bf{\u0014\u00aeG\u00e1z\u0084\u00bf\u00f0\u00a7\u00c6K7\u0089\u0014\u00c0j\u00bct\u0093\u0018\u0004\u0003\u00c07\u0089A`\u00e5\u00d0\u00ee?\u00a0\u001a/\u00dd$\u0006\u0013\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\u0003\u00c0\u00a0\u001a/\u00dd$\u0006\u00e5\u00bfsh\u0091\u00ed|?\u0016\u00c0\u00d7\u00a3p=\n\u00d7\u00f1\u00bf\u009e\u00ef\u00a7\u00c6K7\u0002@\u0086\u00ebQ\u00b8\u001e\u0085\u001a\u00c0333333\u00b3\u00bfq=\n\u00d7\u00a3p\u0000@\u00e9&1\b\u00ac\u009c\u0019\u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\u00f2\u00bf\u009c\u00c4 \u00b0rh\u0007@5^\u00baI\f\u0002\u001e\u00c0\u00ee|?5^\u00ba\u00f7\u00bf\u00dd$\u0006\u0081\u0095C\u0006@\u008bl\u00e7\u00fb\u00a9\u00f1\u0016\u00c0\u00d3Mb\u0010X9\u00f2?\u00b6\u00f3\u00fd\u00d4x\u00e9\u00f2\u00bf6^\u00baI\f\u0082$\u00c0j\u00bct\u0093\u0018\u0004\u00d6?\u00f6(\\\u008f\u00c2\u00f5\u00fa\u00bfh\u0091\u00ed|?5%\u00c0\u0091\u00ed|?5^\u0004@\u00f0\u00a7\u00c6K7\u0089\u00f9\u00bf\u00a8\u00c6K7\u0089A%\u00c0\u00f7(\\\u008f\u00c2\u00f5\b@|\u0014\u00aeG\u00e1z\u00fc\u00bf\u00c9v\u00be\u009f\u001ao#\u00c0th\u0091\u00ed|?\t@5^\u00baI\f\u0002\u00e3\u00bfJ\f\u0002+\u0087\u0016'\u00c0\u00aeG\u00e1z\u0014\u00ae\u0003@=\n\u00d7\u00a3p=\u0007\u00c0\u0098n\u0012\u0083\u00c0\u00ca&\u00c0#\u00db\u00f9~j\u00bc\u00fc?7\u0089A`\u00e5\u00d0\u0005\u00c0\u00ef|?5^z(\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\u000b@\u00d4Mb\u0010X9\t\u00c0\u0015\u00aeG\u00e1z\u0094'\u00c0w\u00be\u009f\u001a/]\u0011@J\f\u0002+\u0087\u0016\u00d1\u00bf<\u00dfO\u008d\u0097\u00ee&\u00c0R\u00b8\u001e\u0085\u00ebQ\u0000@\u0004V\u000e-\u00b2\u009d\u0010\u00c01\b\u00ac\u001cZ$%\u00c0\u00b0rh\u0091\u00ed|\u00f1?\u009f\u00ef\u00a7\u00c6K7\u000f\u00c0\u0093\u0018\u0004V\u000e-$\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u0006@\u00d9\u00ce\u00f7S\u00e3%\u0011\u00c0\u00baI\f\u0002+\u0087#\u00c0Y9\u00b4\u00c8v\u00be\u00ff?\u0080j\u00bct\u0093\u0098\u0015\u00c0\u00e5\u00d0\"\u00db\u00f9\u00fe&\u00c0\u0080j\u00bct\u0093\u0018\b@%\u0006\u0081\u0095C\u008b\u0016\u00c07\u0089A`\u00e5\u0090'\u00c0\u0019\u0004V\u000e-\u00b2\u00f7?Nb\u0010X9\u00b4\u0014\u00c0p\u0012\u0083\u00c0\u00ca\u00e1(\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u00f6?\u00ce\u00cc\u00cc\u00cc\u00ccL\u001a\u00c0\u00fc\u00a9\u00f1\u00d2M\u00a2%\u00c07\u0089A`\u00e5\u00d0\u00fe?fffff\u00e6\u001b\u00c0\u00d7\u00a3p=\n\u0017$\u00c0\u0089A`\u00e5\u00d0\"\u00e3\u00bf\u00ab\u00f1\u00d2Mb\u0010\u001b\u00c0\u00e5\u00d0\"\u00db\u00f9\u00fe'\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u00f7\u00bfB`\u00e5\u00d0\"\u00db\u001c\u00c0\u0010X9\u00b4\u00c8\u00b6'\u00c0\u00d4Mb\u0010X9\u00d4\u00bf\u0005V\u000e-\u00b2\u009d\u0018\u00c0-\u00b2\u009d\u00ef\u00a7\u0086)\u00c0\u00f7(\\\u008f\u00c2\u00f5\u00c8\u00bf)\\\u008f\u00c2\u00f5h \u00c0\u00aeG\u00e1z\u0014\u00ee$\u00c0\u0081\u0095C\u008bl\u00e7\u00eb\u00bf\u00a2E\u00b6\u00f3\u00fd\u0094!\u00c0\u00e2z\u0014\u00aeG\u00e1%\u00c0433333\u00db?\u00b0rh\u0091\u00ed1\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\u00e2?\u008f\u00c2\u00f5(\\\u008f\u0001\u00c0`\u00e5\u00d0\"\u00db\u00b90\u00c0!\u00b0rh\u0091\u00ed\u00e0\u00bf\u00fc\u00a9\u00f1\u00d2Mb\u00e4\u00bf5^\u00baI\fB3\u00c0\u00db\u00f9~j\u00bct\u00f1\u00bf\u0086\u00ebQ\u00b8\u001e\u0085\u00eb\u00bf\u00fe\u00d4x\u00e9&\u00114\u00c0$\u00db\u00f9~j\u00bc\u00d4\u00bf\u00c3\u00f5(\\\u008f\u00c2\u00d5?\u0004V\u000e-\u00b2\u001d3\u00c0\\\u008f\u00c2\u00f5(\\\u00cf\u00bf@5^\u00baI\f\u0006\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d22\u00c0B`\u00e5\u00d0\"\u00db\u00c9?;\u00dfO\u008d\u0097n\f\u00c01\b\u00ac\u001cZd2\u00c0\u00ee|?5^\u00ba\u00e5\u00bf\u00bbI\f\u0002+\u0087\u0006\u00c0\u0096C\u008bl\u00e7\u00bb3\u00c0\u0019\u0004V\u000e-\u00b2\u00ad\u00bf5^\u00baI\f\u0002\u00f9\u00bf\u0087\u0016\u00d9\u00ce\u00f7s2\u00c0\u00baI\f\u0002+\u0087\u0001@<\u00dfO\u008d\u0097n\b@x\u00be\u009f\u001a/\u001d(\u00c0^\u00baI\f\u0002+\u00f5?ffffff\u0004@\f\u0002+\u0087\u0016\u00d9'\u00c0F\u00b6\u00f3\u00fd\u00d4x\u0003@\u00ecQ\u00b8\u001e\u0085\u00eb\u0010@43333s&\u00c0Nb\u0010X9\u00b4\u0007@V\u000e-\u00b2\u009d\u00ef\u0013@L7\u0089A`\u00a5'\u00c0Y9\u00b4\u00c8v\u00be\n@9\u00b4\u00c8v\u00be\u009f\u000f@p\u0012\u0083\u00c0\u00ca!$\u00c0\u00c5 \u00b0rh\u0091\u00f1?7\u0089A`\u00e5P\u0013@\u0003+\u0087\u0016\u00d9N%\u00c0\u00b2\u009d\u00ef\u00a7\u00c6K\u00e3?\u00e7\u00fb\u00a9\u00f1\u00d2M\u0010@\u00cf\u00f7S\u00e3\u00a5\u001b$\u00c0Y9\u00b4\u00c8v\u00be\u000f@\u001f\u0085\u00ebQ\u00b8\u009e\u0013@9\u00b4\u00c8v\u00be\u001f#\u00c0\u00a9\u00c6K7\u0089A\u00f4?\u0019\u0004V\u000e-\u00b2\u0018@\n\u00d7\u00a3p=\n$\u00c0\u00aa\u00f1\u00d2Mb\u0010\u00d8?}?5^\u00baI\u001b@\u00a0\u001a/\u00dd$\u0006$\u00c0\u008f\u00c2\u00f5(\\\u008f\u00fc?\u0083\u00c0\u00ca\u00a1E\u00b6\u0018@\u0004V\u000e-\u00b2\u001d\"\u00c0\u00bct\u0093\u0018\u0004V\u00fe?Zd;\u00dfO\r\u001b@\u001f\u0085\u00ebQ\u00b8^%\u00c0\u00b2\u009d\u00ef\u00a7\u00c6K\u00b7?P\u008d\u0097n\u0012\u0083\u0014@Nb\u0010X9t'\u00c0\u00edQ\u00b8\u001e\u0085\u00eb\u00e9\u00bf1\b\u00ac\u001cZd\u0016@\"\u00b0rh\u0091\u00ad&\u00c0\f\u0002+\u0087\u0016\u00d9\u00e2?\u00aa\u00f1\u00d2Mb\u0010\u0017@\u00f4\u00fd\u00d4x\u00e9\u00e6(\u00c0x\u00be\u009f\u001a/\u00dd\u00c4\u00bf\u00bct\u0093\u0018\u0004\u00d6\u0010@.\u00b2\u009d\u00ef\u00a7\u0086(\u00c0\u0092\u00ed|?5^\f@[d;\u00dfO\u008d\u0005@\u009e\u00ef\u00a7\u00c6K7#\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\u0007@\u00b2\u009d\u00ef\u00a7\u00c6K\u00ff?\u00a6\u009b\u00c4 \u00b0\u00f2#\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0012@P\u008d\u0097n\u0012\u0083\u0002@\u0019\u0004V\u000e-r!\u00c0\u00d7\u00a3p=\n\u00d7\u0012@%\u0006\u0081\u0095C\u008b\b@$\u00db\u00f9~j\u00bc\u001f\u00c033333\u00b3\u0011@D\u008bl\u00e7\u00fb\u00a9\u00f5?\u0002+\u0087\u0016\u00d9\u008e \u00c0\u00fc\u00a9\u00f1\u00d2Mb\u0018@\u0004V\u000e-\u00b2\u009d\u0002@)\\\u008f\u00c2\u00f5\u00a8\"\u00c0\u0084\u00c0\u00ca\u00a1E6\u001c@\u007fj\u00bct\u0093\u0018\u0000@h\u0091\u00ed|?5!\u00c00\u00dd$\u0006\u0081\u0095\u0019@+\u0087\u0016\u00d9\u00ce\u00f7\u0004@\u00a6\u009b\u00c4 \u00b02%\u00c0\u00ac\u001cZd;_\u0016@\u00c2\u00ca\u00a1E\u00b6\u00f3\u0006@Zd;\u00dfOM&\u00c0\u00c4\u00f5(\\\u008f\u00c2\u001e@2\b\u00ac\u001cZd\u0004@%\u0006\u0081\u0095C\u008b&\u00c033333\u00b3\u001f@\u0096C\u008bl\u00e7\u00fb\u00f7?o\u0012\u0083\u00c0\u00ca!&\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u008b!@\u00afG\u00e1z\u0014\u00ae\u000b@\u00bct\u0093\u0018\u0004V%\u00c0\u0003+\u0087\u0016\u00d9\u00ce\u001d@\u00aeG\u00e1z\u0014\u00ae\u0005@e;\u00dfO\u008d\u0097)\u00c0\u0019\u0004V\u000e-2\u001a@\u008bl\u00e7\u00fb\u00a9\u00f1\u0000@\u00e2z\u0014\u00aeG\u00e1)\u00c0\u00d3Mb\u0010X9\u001d@\u00fe\u00d4x\u00e9&1\u000e@\u00e2z\u0014\u00aeG\u00e1)\u00c0\u0012\u0083\u00c0\u00ca\u00a1E!@\u000e-\u00b2\u009d\u00ef\u00a7\u0012@\u00d4Mb\u0010X9%\u00c0-\u00b2\u009d\u00ef\u00a7F!@\u0088\u0016\u00d9\u00ce\u00f7S\u0001@\u00aeG\u00e1z\u0014.+\u00c0\u009a\u0099\u0099\u0099\u0099Y\"@\u00a5p=\n\u00d7\u00a3\u0007@\u009f\u00ef\u00a7\u00c6K\u00b7,\u00c0\u008bl\u00e7\u00fb\u00a9\u00f1!@\u000e-\u00b2\u009d\u00ef\u00a7\u00ee?\u00c7K7\u0089A\u00e0*\u00c0\u001b/\u00dd$\u0006\u00c1#@\b\u00ac\u001cZd;\u0007@\u00ea&1\b\u00ac\\$\u00c0\u00e9&1\b\u00ac\u00dc#@R\u00b8\u001e\u0085\u00ebQ\u00fe?L7\u0089A`%$\u00c0'1\b\u00ac\u001c\u001a&@\u00cb\u00a1E\u00b6\u00f3\u00fd\r@\u00d9\u00ce\u00f7S\u00e3\u00a5#\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4'@\u0083\u00c0\u00ca\u00a1E\u00b6\b@@5^\u00baI\u00cc#\u00c0\u00c4\u00f5(\\\u008fB&@!\u00b0rh\u0091m\u0012@\u0096C\u008bl\u00e7\u00fb$\u00c0R\u00b8\u001e\u0085\u00eb\u00d1%@h\u0091\u00ed|?5\u0011@\u00ee|?5^\u00ba \u00c0\u00fd\u00a9\u00f1\u00d2M\u00e2'@\u0019\u0004V\u000e-\u00b2\u0012@5^\u00baI\f\u0002\u001f\u00c0d;\u00dfO\u008dW#@\u0000\u0000\u0000\u0000\u0000\u0080\u0011@\u00ecQ\u00b8\u001e\u0085k\u001f\u00c0sh\u0091\u00ed|\u00bf!@7\u0089A`\u00e5\u00d0\u000f@\u00d1\"\u00db\u00f9~\u00aa \u00c0\u00b4\u00c8v\u00be\u009f\u00da\"@\u00d2\"\u00db\u00f9~j\u0014@2\b\u00ac\u001cZd\u001a\u00c0}?5^\u00ba\t#@43333\u00b3\u0018@%\u0006\u0081\u0095C\u000b\u001b\u00c0\u00a2E\u00b6\u00f3\u00fd\u0094$@\u00ac\u001cZd;_\u0012@C`\u00e5\u00d0\"\u00db\u0015\u00c033333\u00b3\u001f@\n\u00d7\u00a3p=\u008a\u0013@\u0082\u0095C\u008bl\u00e7\u0018\u00c0\u00a0\u001a/\u00dd$\u0006\u001f@\u009b\u0099\u0099\u0099\u0099\u0099\u000e@\u00b4\u00c8v\u00be\u009f\u001a\u0018\u00c0\u00b3\u009d\u00ef\u00a7\u00c6\u00cb%@b\u0010X9\u00b4\u00c8\u0015@\u00e4\u00a5\u009b\u00c4 0\u0013\u00c0*\\\u008f\u00c2\u00f5\u00a8\u001e@\u00a9\u00c6K7\u0089\u00c1\u0016@\u00e3\u00a5\u009b\u00c4 \u00b0\u0013\u00c0\u00c2\u00ca\u00a1E\u00b6s\u001a@<\u00dfO\u008d\u0097\u00ee\u0016@\u0000\u0000\u0000\u0000\u0000\u0080\u0012\u00c0\u00a0\u001a/\u00dd$\u0086\u001f@\u00ad\u001cZd;\u00df\u001a@\u0098n\u0012\u0083\u00c0\u00ca\u0014\u00c0\b\u00ac\u001cZd{ @\u00f8S\u00e3\u00a5\u009b\u00c4\u0015@\u009a\u0099\u0099\u0099\u0099\u0019\u0010\u00c0`\u00e5\u00d0\"\u00db\u00f9\u001b@\u00f4\u00fd\u00d4x\u00e9\u00a6\u0015@\u0094\u0018\u0004V\u000e-\u001d\u00c0}?5^\u00ba\u00c9\u001c@\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u0019@\u00ce\u00cc\u00cc\u00cc\u00ccL\u001e\u00c0\u00c4\u00f5(\\\u008fB\u001c@\u00b0rh\u0091\u00ed|\u0013@`\u00e5\u00d0\"\u00dby \u00c0\u00fe\u00d4x\u00e9&\u00b1\u0017@\u008d\u0097n\u0012\u0083@\u0015@\u00a0\u001a/\u00dd$\u0086\u001c\u00c0h\u0091\u00ed|?\u00b5$@\"\u00b0rh\u0091\u00ed\t@Zd;\u00dfO\r\u0015\u00c0\u00e2z\u0014\u00aeG\u00a1#@\u001dZd;\u00dfO\u0004@\u00a0\u001a/\u00dd$\u0006\u0017\u00c0H\u00e1z\u0014\u00aeG&@\u00d8\u00a3p=\n\u00d7\u0005@\u0019\u0004V\u000e-\u00b2\u0010\u00c0\u00d4Mb\u0010Xy%@\u008aA`\u00e5\u00d0\"\t@\u0000\u0000\u0000\u0000\u0000\u0000\n\u00c0\b\u00ac\u001cZd;)@P\u008d\u0097n\u0012\u0083\t@\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0010\u00c0~?5^\u00ba\t&@)\\\u008f\u00c2\u00f5(\u00f2?-\u00b2\u009d\u00ef\u00a7\u00c6\u0010\u00c0ffffff&@\u00a5p=\n\u00d7\u00a3\u00e8?\\\u008f\u00c2\u00f5(\u00dc\u0014\u00c0\u00f2\u00d2Mb\u0010X'@\u00f7(\\\u008f\u00c2\u00f5\u00e8?^\u00baI\f\u0002+\u000b\u00c0\u00a4p=\n\u00d7c*@\u0000\u0000\u0000\u0000\u0000\u0000\u000b@\u0093\u0018\u0004V\u000e-\t\u00c0\u0085\u00ebQ\u00b8\u001eE#@\u00b4\u00c8v\u00be\u009f\u001a\u00e3?8\u0089A`\u00e5\u00d0\r\u00c0\u008d\u0097n\u0012\u0083\u0000#@D\u008bl\u00e7\u00fb\u00a9\u00ed?\u0004V\u000e-\u00b2\u009d\u0005\u00c0\u0017\u00d9\u00ce\u00f7S\u00a3!@\u00a8\u00c6K7\u0089A\u00f0?\u00c3\u00f5(\\\u008fB\u0011\u00c0\u0010X9\u00b4\u00c8\u00b6\"@\u0084\u00c0\u00ca\u00a1E\u00b6\u00eb\u00bf\u0082\u0095C\u008bl\u00e7\u000f\u00c0\u00baI\f\u0002+\u0087 @\t\u00ac\u001cZd;\u00f5\u00bf\u00c5 \u00b0rh\u0011\u0012\u00c0\u00c8K7\u0089A\u00e0\u001d@8\u0089A`\u00e5\u00d0\u00e6\u00bf\u00e9&1\b\u00ac\u009c\u0012\u00c0\u008d\u0097n\u0012\u0083@ @/\u00dd$\u0006\u0081\u0095\u0002\u00c0\u001b/\u00dd$\u0006\u0001\u0012\u00c0\u0084\u00c0\u00ca\u00a1Ev$@\u00e2z\u0014\u00aeG\u00e1\u00fa\u00bf\"\u00b0rh\u0091\u00ed\r\u00c0\u00b5\u00c8v\u00be\u009fZ*@\u00d9\u00ce\u00f7S\u00e3\u00a5\n@ \u0085\u00ebQ\u00b8\u009e\u0015\u00c0gffff&)@)\\\u008f\u00c2\u00f5(\n@\u0018\u00d9\u00ce\u00f7S\u00e3\u0018\u00c0$\u00db\u00f9~j<-@V\u000e-\u00b2\u009d\u00ef\f@=\n\u00d7\u00a3p=\u0016\u00c0n\u00e7\u00fb\u00a9\u00f1R.@\u001b/\u00dd$\u0006\u0081\b@z\u00e9&1\b,\u0013\u00c0\"\u00b0rh\u0091\u00ed-@L7\u0089A`e\u0014@5^\u00baI\f\u0082\u0015\u00c0F\u00b6\u00f3\u00fd\u00d48.@\u00d7\u00a3p=\n\u00d7\b@\u00e4\u00a5\u009b\u00c4 \u00b0\u001b\u00c0\u0083\u00c0\u00ca\u00a1E\u00160@\u00c5 \u00b0rh\u0091\f@M7\u0089A`e\u001c\u00c0\u0099n\u0012\u0083\u00c0\u00ca,@x\u00be\u009f\u001a/\u00dd\n@H\u00e1z\u0014\u00ae\u00c7\u001e\u00c0i\u0091\u00ed|?\u00f5/@D\u008bl\u00e7\u00fb\u00a9\u0015@\u00e7\u00fb\u00a9\u00f1\u00d2M\u0013\u00c0\u009b\u0099\u0099\u0099\u0099\u0099.@th\u0091\u00ed|?\u00f9?\u0005V\u000e-\u00b2\u001d\u001c\u00c0^\u00baI\f\u0002+/@\u001dZd;\u00dfO\u00f3?\u00e4\u00a5\u009b\u00c4 0\u0018\u00c0\u0010X9\u00b4\u00c8\u00b6,@\u00e5\u00d0\"\u00db\u00f9~\u00f2?G\u00b6\u00f3\u00fd\u00d4x\u001d\u00c0\u00ac\u001cZd;_0@\u009a\u0099\u0099\u0099\u0099\u0099\u00f3?o\u0012\u0083\u00c0\u00ca! \u00c0-\u00b2\u009d\u00ef\u00a7\u00a60@\u00b6\u00f3\u00fd\u00d4x\u00e9\u00c6?\u00fe\u00d4x\u00e9&\u00b1\u001f\u00c0q=\n\u00d7\u00a3P1@\u00d3Mb\u0010X9\u00fc?\u0096C\u008bl\u00e7\u00fb\u001f\u00c0\u00cf\u00f7S\u00e3\u00a5\u009b/@\u00d1\"\u00db\u00f9~j\u00f6?Nb\u0010X9\u00f4\"\u00c0#\u00db\u00f9~j\u001c0@-\u00b2\u009d\u00ef\u00a7\u00c6\u0001@D\u008bl\u00e7\u00fb\u00e9#\u00c08\u0089A`\u00e5\u0090,@\u00cb\u00a1E\u00b6\u00f3\u00fd\u00d4\u00bf6^\u00baI\f\u0082#\u00c0x\u00be\u009f\u001a/\u001d+@\u00be\u009f\u001a/\u00dd$\u00e6\u00bf\u0011X9\u00b4\u00c8\u00b6$\u00c0#\u00db\u00f9~j\u00fc,@D\u008bl\u00e7\u00fb\u00a9\u00ed\u00bf\u00db\u00f9~j\u00bc\u00f4!\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9,@y\u00e9&1\b\u00ac\u00f2?>\n\u00d7\u00a3p}&\u00c0\u00d9\u00ce\u00f7S\u00e3\u00e5+@\u00fa~j\u00bct\u0093\u00e0?\u000f-\u00b2\u009d\u00ef\u00a7'\u00c0v\u0093\u0018\u0004V\u00ce-@\u001a\u0004V\u000e-\u00b2\u00ff?@5^\u00baIL'\u00c0Zd;\u00dfO\u00cd-@\u0003+\u0087\u0016\u00d9\u00ce\u00e7?\u0083\u00c0\u00ca\u00a1E6$\u00c0'1\b\u00ac\u001c\u001a,@gffff\u00e6\u0017@\u00d9\u00ce\u00f7S\u00e3%\u0017\u00c0\u00ecQ\u00b8\u001e\u0085k*@\f\u0002+\u0087\u0016Y\u0016@\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd\u0018\u00c0\u00b5\u00c8v\u00be\u009f\u009a,@\u00aeG\u00e1z\u0014\u00ae\u001d@v\u0093\u0018\u0004V\u008e\u0016\u00c0r=\n\u00d7\u00a3\u00b0.@P\u008d\u0097n\u0012\u0083\u001e@\u001b/\u00dd$\u0006\u0081\u0017\u00c0@5^\u00baI\f,@w\u00be\u009f\u001a/]\u001f@\u00dfO\u008d\u0097n\u0092\u0010\u00c0\u00a7\u009b\u00c4 \u00b0\u00b2*@F\u00b6\u00f3\u00fd\u00d4x @\u00b4\u00c8v\u00be\u009f\u009a\u001a\u00c0M7\u0089A`\u00a5(@33333\u00b3\u001f@\u008cl\u00e7\u00fb\u00a9\u00f1\u0019\u00c0r=\n\u00d7\u00a3\u00f0*@\u0091\u00ed|?5\u009e\"@\u001c/\u00dd$\u0006\u0001\u001a\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u008d-@R\u00b8\u001e\u0085\u00ebQ!@X9\u00b4\u00c8v\u00be\f\u00c0h\u0091\u00ed|?\u00b5+@\u00b4\u00c8v\u00be\u009f\u001a @1\b\u00ac\u001cZ$ \u00c0v\u0093\u0018\u0004V\u000e*@\u0083\u00c0\u00ca\u00a1E\u00b6\u001d@z\u00e9&1\b\u00ec!\u00c0n\u00e7\u00fb\u00a9\u00f1\u0092*@1\b\u00ac\u001cZd\u001d@\u00e1z\u0014\u00aeG\u00e1#\u00c0M7\u0089A`e(@\u001a\u0004V\u000e-2\u001c@\u001dZd;\u00df\u000f!\u00c05^\u00baI\f\u0002.@%\u0006\u0081\u0095C\u008b @\u00ee|?5^\u00ba \u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2)@<\u00dfO\u008d\u0097n\u001d@\u00a3E\u00b6\u00f3\u00fd\u00d4\f\u00c0\u0082\u0095C\u008bl\u00e7(@D\u008bl\u00e7\u00fb\u00a9\u001a@\u00f4\u00fd\u00d4x\u00e9\u00a6\u0010\u00c0\u001c/\u00dd$\u0006A)@\u001eZd;\u00df\u00cf\u001d@\u001f\u0085\u00ebQ\u00b8\u001e\u0001\u00c0i\u0091\u00ed|?\u00b5)@D\u008bl\u00e7\u00fb\u00e9 @\u00fa~j\u00bct\u0093\u00fc\u00bf\u0094\u0018\u0004V\u000e\u00ed*@\u00ff\u00d4x\u00e9&\u00b1\u0019@\u00b4\u00c8v\u00be\u009f\u001a\u00f5\u00bfP\u008d\u0097n\u0012C&@\n\u00d7\u00a3p=\n\u001d@\u00d5x\u00e9&1\b\u00fe\u00bfP\u008d\u0097n\u0012\u00c3%@\u00aa\u00f1\u00d2Mb\u0010\u001d@\u00edQ\u00b8\u001e\u0085\u00eb\u00e9\u00bf\u00dfO\u008d\u0097n\u0012&@\u00ea&1\b\u00ac\u001c\u0019@\u0019\u0004V\u000e-\u00b2\u0002\u00c0Q\u008d\u0097n\u0012C*@\u00c1\u00ca\u00a1E\u00b6s\u0018@K\f\u0002+\u0087\u0016\u00c9\u00bf\u0097C\u008bl\u00e7{$@}?5^\u00ba\u0089 @\u0090\u00c2\u00f5(\\\u008f\u0004\u00c0\u00a0\u001a/\u00dd$\u0006$@\u00e4\u00a5\u009b\u00c4 \u00b0 @\u00ea&1\b\u00ac\u001c\u000f\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2$@\u00b2\u009d\u00ef\u00a7\u00c6K\u001f@\u00db\u00f9~j\u00bc\u00f4\u0012\u00c0\u00d1\"\u00db\u00f9~\u00ea\"@'1\b\u00ac\u001cZ\"@\u00a9\u00c6K7\u0089A\u00fe\u00bf?5^\u00baI\u00cc\"@\u00db\u00f9~j\u00bc\u00b4\"@\u00fa~j\u00bct\u0093\u00ec\u00bf\u008e\u0097n\u0012\u0083@!@\b\u00ac\u001cZd;#@\u00afG\u00e1z\u0014\u00ae\u0006\u00c0\u0081\u0095C\u008blg\u001f@\u00f2\u00d2Mb\u0010\u0098$@\u00aa\u00f1\u00d2Mb\u0010\u0004\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2!@\u0096C\u008bl\u00e7{\"@\u00cd\u00cc\u00cc\u00cc\u00ccL\u0010\u00c0\u0011X9\u00b4\u00c86-@|\u0014\u00aeG\u00e1z\u0017@\u0012\u0083\u00c0\u00ca\u00a1E\u00fc\u00bf\u00a5p=\n\u00d7\u00e3-@\u009b\u0099\u0099\u0099\u0099\u0099\u0018@\u00db\u00f9~j\u00bct\u0005\u00c0`\u00e5\u00d0\"\u00dby.@\u00be\u009f\u001a/\u00dd$\u0013@\u00b5\u00c8v\u00be\u009f\u001a\u00ef\u00bf\u00d2\"\u00db\u00f9~*-@P\u008d\u0097n\u0012\u0083\u000f@\u00cb\u00a1E\u00b6\u00f3\u00fd\u00e8\u00bf\u00c9v\u00be\u009f\u001a\u00af/@\u00cav\u00be\u009f\u001a/\u0015@\u0080j\u00bct\u0093\u0018\u00d4?\u00c3\u00f5(\\\u008fb0@^\u00baI\f\u0002\u00ab\u0010@,\u0087\u0016\u00d9\u00ce\u00f7\u00fd\u00bf\u00c1\u00ca\u00a1E\u00b6\u00f3/@\u00cav\u00be\u009f\u001a/\u000f@\u00b8\u001e\u0085\u00ebQ\u00b8\u0006\u00c0\u0014\u00aeG\u00e1z\u00141@\u008bl\u00e7\u00fb\u00a9\u00f1\u0013@q=\n\u00d7\u00a3p\u0000\u00c0\u00afG\u00e1z\u0014./@X9\u00b4\u00c8v>\u0012@\u00dd$\u0006\u0081\u0095C\u00f5?p\u0012\u0083\u00c0\u00ca\u00011@\u00aeG\u00e1z\u0014\u00ae\u0007@\u00b6\u00f3\u00fd\u00d4x\u00e9\u00f2\u00bffffff&0@\u00b8\u001e\u0085\u00ebQ\u00b8\u0003@\b\u00ac\u001cZd;\u00e7\u00bf\u0081\u0095C\u008bl\u00a71@\u009d\u00c4 \u00b0rh\t@sh\u0091\u00ed|?\u00d5\u00bf\u00d7\u00a3p=\n\u00971@\u00f4\u00fd\u00d4x\u00e9&\u0000@y\u00e9&1\b\u00ac\u0001\u00c0F\u00b6\u00f3\u00fd\u00d4\u00f80@b\u0010X9\u00b4\u00c8\u00f0?\u0096C\u008bl\u00e7\u00fb\u0004\u00c0F\u00b6\u00f3\u00fd\u00d4\u00b82@\u00be\u009f\u001a/\u00dd$\u0002@\u0004V\u000e-\u00b2\u009d\u0005\u00c0\u000e-\u00b2\u009d\u00ef\u00870@\u009c\u00c4 \u00b0r\u00e8\u0019@\u00e8\u00fb\u00a9\u00f1\u00d2M\u00d2?-\u00b2\u009d\u00ef\u00a7\u00860@\u0088\u0016\u00d9\u00ce\u00f7S\u001c@(1\b\u00ac\u001cZ\u00e0\u00bf\u00ecQ\u00b8\u001e\u0085+1@\r\u0002+\u0087\u0016\u00d9\u001b@B`\u00e5\u00d0\"\u00db\u00f7?\u00d4Mb\u0010X\u00b91@7\u0089A`\u00e5P\u0018@\u00b6\u00f3\u00fd\u00d4x\u00e9\u00fc?B`\u00e5\u00d0\"\u001b0@\u00d5x\u00e9&1\b\u001e@!\u00b0rh\u0091\u00ed\u0003@\u0087\u0016\u00d9\u00ce\u00f7\u00132@\u00a0\u001a/\u00dd$F @u\u0093\u0018\u0004V\u000e\u00f1?\f\u0002+\u0087\u0016y1@\u00f4\u00fd\u00d4x\u00e9\u00e6!@\u00cav\u00be\u009f\u001a/\u00e5?\u007fj\u00bct\u0093X0@\u00d5x\u00e9&1\b\u001e@d;\u00dfO\u008d\u0097\r@\u0012\u0083\u00c0\u00ca\u00a1\u00e52@\u00a8\u00c6K7\u0089A!@\u00ecQ\u00b8\u001e\u0085\u00eb\u0001@\u00a6\u009b\u00c4 \u00b0\u00923@\u00a9\u00c6K7\u0089A\u001f@\b\u00ac\u001cZd;\u0004@\u00dd$\u0006\u0081\u0095#2@\u00be\u009f\u001a/\u00dd\u00e4!@/\u00dd$\u0006\u0081\u0095\u0007@\u00dd$\u0006\u0081\u0095\u00a33@.\u00b2\u009d\u00ef\u00a7\u00c6\"@\u00aeG\u00e1z\u0014\u00ae\u00ff?\n\u00d7\u00a3p=\n3@\u0000\u0000\u0000\u0000\u0000\u0000\u001f@Y9\u00b4\u00c8v\u00be\u00af?\u00f0\u00a7\u00c6K7\u00892@(1\b\u00ac\u001c\u00da\u001e@\u0003+\u0087\u0016\u00d9\u00ce\u00e7\u00bfgffff\u00e6-@\u00bdt\u0093\u0018\u0004\u00d6\u001f@\t\u00ac\u001cZd;\u00ff?T\u00e3\u00a5\u009b\u00c4\u00e0-@&\u0006\u0081\u0095C\u008b\u001f@\u00bf\u009f\u001a/\u00dd$\u00ee?\u00bct\u0093\u0018\u0004\u0096+@\u00a6\u009b\u00c4 \u00b0\u00b2 @\u0098n\u0012\u0083\u00c0\u00ca\u0005@\u00e8\u00fb\u00a9\u00f1\u00d2M,@Nb\u0010X94\"@\u009c\u00c4 \u00b0rh\u000b@th\u0091\u00ed|?*@\u0086\u00ebQ\u00b8\u001e\u0005\u001d@\u00a3E\u00b6\u00f3\u00fd\u00d4\f@Zd;\u00dfO\u00cd)@d;\u00dfO\u008d\u0017\"@\u001eZd;\u00dfO\u00fb?h\u0091\u00ed|?5)@\u001dZd;\u00df\u00cf @(1\b\u00ac\u001cZ\u00ec?q=\n\u00d7\u00a3\u00f0'@\u00d1\"\u00db\u00f9~\u00aa\"@p\u0012\u0083\u00c0\u00ca\u00a1\u0001@\u00b7\u00f3\u00fd\u00d4x\u00e9*@\u009e\u00ef\u00a7\u00c6K\u00b7#@\u00c1\u00ca\u00a1E\u00b6\u00f3\u00f3?x\u00be\u009f\u001a/\u009d)@\u000e-\u00b2\u009d\u00ef'\u001d@H\u00e1z\u0014\u00aeG\u0013@\u0096C\u008bl\u00e7\u00fb)@\u00e2z\u0014\u00aeGa\u0018@Nb\u0010X9\u00b4\u0007@\u009a\u0099\u0099\u0099\u0099Y*@D\u008bl\u00e7\u00fb)\u0018@[d;\u00dfO\u008d\u00ff?\"\u00b0rh\u0091\u00ed(@7\u0089A`\u00e5P\u0013@p\u0012\u0083\u00c0\u00ca\u00a1\u000b@ \u0085\u00ebQ\u00b8\u001e'@\u00b6\u00f3\u00fd\u00d4x\u00e9\u0013@433333\u0010@|\u0014\u00aeG\u00e1\u00fa*@\u008f\u00c2\u00f5(\\\u008f\u0010@\u00f6(\\\u008f\u00c2u\u0011@~?5^\u00baI(@\u0092\u00ed|?5^\u000f@m\u00e7\u00fb\u00a9\u00f1\u00d2\u0001@\u0019\u0004V\u000e-\u00f2)@\\\u008f\u00c2\u00f5(\\\u000e@<\u00dfO\u008d\u0097n\u00f8?\u00f7(\\\u008f\u00c2\u00f5'@/\u00dd$\u0006\u0081\u0095\u0007@\u00aeG\u00e1z\u0014\u00ae\u0005@\u00fa~j\u00bctS*@F\u00b6\u00f3\u00fd\u00d4x\u000e@\u00baI\f\u0002+\u0007\u0016@\u0006\u0081\u0095C\u008b\u00ec%@ffffff\u0011@\u0006\u0081\u0095C\u008bl\u00f5?\u0003+\u0087\u0016\u00d9\u000e$@{\u0014\u00aeG\u00e1z\u0015@\u0097C\u008bl\u00e7\u00fb\u00fb?P\u008d\u0097n\u0012C$@7\u0089A`\u00e5P\u0017@b\u0010X9\u00b4\u00c8\u0005@\u0017\u00d9\u00ce\u00f7Sc%@\u00c9v\u00be\u009f\u001a/\r@`\u00e5\u00d0\"\u00db\u00f9\u00be?\r\u0002+\u0087\u0016\u00d9&@\u00dfO\u008d\u0097n\u0012\u0007@\u00c3\u00f5(\\\u008f\u00c2\u00b5\u00bf\u00c9v\u00be\u009f\u001a\u00af!@X9\u00b4\u00c8v>\u0016@\u0011X9\u00b4\u00c8v\u00ee?\u0014\u00aeG\u00e1zT @\u00b9\u001e\u0085\u00ebQ8\u0019@[d;\u00dfO\u008d\u00f5??5^\u00baIL#@\u00c4\u00f5(\\\u008fB\u0010@/\u00dd$\u0006\u0081\u0095\u00e7\u00bf\u0000\u0000\u0000\u0000\u0000\u0000#@\u00a8\u00c6K7\u0089A\f@&\u0006\u0081\u0095C\u008b\u00fa\u00bf\u00e7\u00fb\u00a9\u00f1\u00d2\u008d!@\u00b2\u009d\u00ef\u00a7\u00c6K\u0014@\\\u008f\u00c2\u00f5(\\\u00d7\u00bf\u00ef|?5^\u00ba\u001f@\u009f\u00ef\u00a7\u00c6K7\u0015@+\u0087\u0016\u00d9\u00ce\u00f7\u00ef\u00bfH\u00e1z\u0014\u00ae\u0087-@\u00d5x\u00e9&1\u0088\u0010@\u0000\u0000\u0000\u0000\u0000\u0000\u0010@\u00d4Mb\u0010X\u00f9-@\u00bct\u0093\u0018\u0004V\u0011@\u00e8\u00fb\u00a9\u00f1\u00d2M\b@\u0001\u0000\u0000\u0000\u0000\u00c0/@\u00b8\u001e\u0085\u00ebQ\u00b8\r@$\u00db\u00f9~j\u00bc\u0013@K\f\u0002+\u0087V/@\u00baI\f\u0002+\u0087\u0005@\u00f6(\\\u008f\u00c2\u00f5\u0014@\u00b8\u001e\u0085\u00ebQ\u00f8/@\u00fc\u00a9\u00f1\u00d2M\u00e2\u0011@\u0090\u00c2\u00f5(\\\u000f\u0019@9\u00b4\u00c8v\u00be\u001f1@\u00f2\u00d2Mb\u0010X\r@\u0000\u0000\u0000\u0000\u0000\u0080\u0010@Zd;\u00dfO\u00ed0@\u00c7K7\u0089A`\b@\u00a0\u001a/\u00dd$\u0006\n@\u00a0\u001a/\u00dd$F1@V\u000e-\u00b2\u009d\u00ef\u0012@\u00e4\u00a5\u009b\u00c4 \u00b0\u000f@\u0091\u00ed|?5\u00de/@)\\\u008f\u00c2\u00f5(\u000e@\u00a4p=\n\u00d7#\u001d@\u00baI\f\u0002+G2@\u001b/\u00dd$\u0006\u0081\u0007@\u00b8\u001e\u0085\u00ebQ\u00b8\u0013@\u00dd$\u0006\u0081\u0095\u00e31@\u0006\u0081\u0095C\u008bl\u0001@\u00edQ\u00b8\u001e\u0085k\u0016@h\u0091\u00ed|?\u00f52@\u00c6 \u00b0rh\u0091\u0003@+\u0087\u0016\u00d9\u00ce\u00f7\u0010@!\u00b0rh\u0091-3@\u008e\u0097n\u0012\u0083\u00c0\u000e@\u00a3E\u00b6\u00f3\u00fd\u00d4\u0016@\u00d1\"\u00db\u00f9~*4@sh\u0091\u00ed|?\u000b@x\u00be\u009f\u001a/]\u0019@\u0093\u0018\u0004V\u000e\u00cd4@\u00d0\u00f7S\u00e3\u00a5\u001b\u0010@.\u00b2\u009d\u00ef\u00a7F\u001b@X9\u00b4\u00c8v^4@\u00bct\u0093\u0018\u0004V\u0003@\u00e6\u00d0\"\u00db\u00f9\u00fe\u0018@\u00f6(\\\u008f\u00c2\u00f52@T\u00e3\u00a5\u009b\u00c4 \u0014@\u00c6 \u00b0rh\u0011\u0017@\u008bl\u00e7\u00fb\u00a9\u00f1/@!\u00b0rh\u0091m\u0017@U\u00e3\u00a5\u009b\u00c4 \u0019@M7\u0089A`\u00e5/@\u00b4\u00c8v\u00be\u009f\u009a\u0019@X9\u00b4\u00c8v\u00be\u0015@\u00baI\f\u0002+\u00c7/@\u00b2\u009d\u00ef\u00a7\u00c6K\u001a@R\u00b8\u001e\u0085\u00ebQ\u001e@u\u0093\u0018\u0004V\u00ce0@\u00b5\u00c8v\u00be\u009f\u001a\u001a@\u00f2\u00d2Mb\u0010X @\u00c6 \u00b0rh\u0091/@\u00b0rh\u0091\u00ed|\u001e@\u001eZd;\u00dfO\u001d@Zd;\u00dfO\u008d-@\u00f0\u00a7\u00c6K7\u0089\u0018@1\b\u00ac\u001cZ\u00e4 @)\\\u008f\u00c2\u00f5(.@\u0014\u00aeG\u00e1z\u0014\u0017@V\u000e-\u00b2\u009d/#@]\u008f\u00c2\u00f5(\u001c+@\u0089A`\u00e5\u00d0\u00a2\u0017@\u00c9v\u00be\u009f\u001a\u00af\u001f@\u00c3\u00f5(\\\u008f\u00c2*@\b\u00ac\u001cZd;\u0018@>\n\u00d7\u00a3p\u00bd\u001b@\u00a8\u00c6K7\u0089\u00c1(@=\n\u00d7\u00a3p=\u0016@\u00f8S\u00e3\u00a5\u009b\u0084!@\u0007\u0081\u0095C\u008b,(@\u0004V\u000e-\u00b2\u001d\u0019@\u00baI\f\u0002+\u0007#@\"\u00b0rh\u0091-)@\u00c3\u00f5(\\\u008f\u00c2\u0010@!\u00b0rh\u0091\u00ad\"@\u00e6\u00d0\"\u00db\u00f9~&@\u0019\u0004V\u000e-\u00b2\u0016@\u00d4Mb\u0010X9\u001f@\u00fe\u00d4x\u00e9&\u00b1&@H\u00e1z\u0014\u00ae\u00c7\u0013@{\u0014\u00aeG\u00e1\u00fa\u001b@\u0003+\u0087\u0016\u00d9\u008e&@\u009a\u0099\u0099\u0099\u0099\u0099\u001a@\f\u0002+\u0087\u0016Y\u001d@\u008cl\u00e7\u00fb\u00a9\u00f1(@e;\u00dfO\u008d\u0097\u000f@\u00c4\u00f5(\\\u008f\u0002%@+\u0087\u0016\u00d9\u00ce\u00b7#@;\u00dfO\u008d\u0097n\u0015@\u00baI\f\u0002+\u00c7 @\u00e1z\u0014\u00aeG\u00e1#@\u00f6(\\\u008f\u00c2u\u0011@^\u00baI\f\u0002\u00ab!@\u00a8\u00c6K7\u0089A\"@P\u008d\u0097n\u0012\u0083\u0015@\u00d8\u00a3p=\nW\u001e@X9\u00b4\u00c8v\u00be\"@\u00a5p=\n\u00d7#\u001a@\u00a0\u001a/\u00dd$\u0086#@m\u00e7\u00fb\u00a9\u00f1\u0092!@\u0091\u00ed|?5\u00de\u001f@\u00cf\u00f7S\u00e3\u00a5\u009b!@;\u00dfO\u008d\u0097n!@\u0098n\u0012\u0083\u00c0\u008a!@\u008f\u00c2\u00f5(\\\u000f#@-\u00b2\u009d\u00ef\u00a7\u0006#@\u00a4p=\n\u00d7c @%\u0006\u0081\u0095C\u000b @Zd;\u00dfO\r\u001f@\u009a\u0099\u0099\u0099\u0099\u0019\u001f@33333\u00f3 @\u00f4\u00fd\u00d4x\u00e9\u00e6)@\u001a\u0004V\u000e-\u00b2\t@\u00e9&1\b\u00ac\u001c!@\u001dZd;\u00dfO*@\u00e7\u00fb\u00a9\u00f1\u00d2M\u000b@\u00c8K7\u0089A`\u001e@\u00c8K7\u0089A\u00a0*@u\u0093\u0018\u0004V\u000e\u00fd?b\u0010X9\u00b4\b\"@\u00c2\u00ca\u00a1E\u00b6\u00f3(@\u000e-\u00b2\u009d\u00ef\u00a7\u00f6?V\u000e-\u00b2\u009d/#@<\u00dfO\u008d\u0097\u00ee,@C`\u00e5\u00d0\"\u00db\u00fb?9\u00b4\u00c8v\u00be\u001f$@\u0011X9\u00b4\u00c8\u00f6*@\u00b8\u001e\u0085\u00ebQ\u00b8\u00ee?\u00bdt\u0093\u0018\u0004\u00d6\u001e@~?5^\u00baI)@,\u0087\u0016\u00d9\u00ce\u00f7\u00eb?\u00c6 \u00b0rh\u0011\u001c@\u00cav\u00be\u009f\u001a\u00af,@\u00d9\u00ce\u00f7S\u00e3\u00a5\u00f5?\u0004V\u000e-\u00b2\u009d\u001c@Nb\u0010X9\u00b4,@)\\\u008f\u00c2\u00f5(\u00f2?\u00b2\u009d\u00ef\u00a7\u00c6K&@\u00fb~j\u00bct\u00d3+@\u00fc\u00a9\u00f1\u00d2Mb\u00e0\u00bfP\u008d\u0097n\u0012\u0003 @\u0088\u0016\u00d9\u00ce\u00f7\u0093-@\u00e0O\u008d\u0097n\u0012\u00db\u00bfZd;\u00dfOM!@\u000e-\u00b2\u009d\u00ef\u00a7)@433333\u00f5\u00bf\u0098n\u0012\u0083\u00c0J!@\u00ecQ\u00b8\u001e\u0085k)@\u0004V\u000e-\u00b2\u009d\u00ef\u00bf \u0085\u00ebQ\u00b8^#@k\u00bct\u0093\u0018\u0084*@\u00baI\f\u0002+\u0087\u0002\u00c05^\u00baI\f\u0082!@\u00c5 \u00b0rh\u00d1'@\u00d9\u00ce\u00f7S\u00e3\u00a5\u00f3\u00bf\u0089A`\u00e5\u00d0\" @b\u0010X9\u00b4\u00c8,@R\u00b8\u001e\u0085\u00ebQ\u00f2\u00bf\u00b4\u00c8v\u00be\u009f\u009a\u001a@i\u0091\u00ed|?u-@\u001eZd;\u00dfO\u0001\u00c0\u00db\u00f9~j\u00bct\u001b@\u0083\u00c0\u00ca\u00a1E6+@\u00a4p=\n\u00d7\u00a3\u00f2\u00bf\u0004V\u000e-\u00b2\u009d\u0017@\u00ecQ\u00b8\u001e\u0085+.@\u0011X9\u00b4\u00c8v\u00de\u00bfd;\u00dfO\u008d\u0097\u0018@h\u0091\u00ed|?5/@9\u00b4\u00c8v\u00be\u009f\u0003@\u00cb\u00a1E\u00b6\u00f3\u00bd#@\u00cb\u00a1E\u00b6\u00f3=/@\u00ecQ\u00b8\u001e\u0085\u00eb\u0007@\u00b2\u009d\u00ef\u00a7\u00c6\u000b\"@\u00db\u00f9~j\u00bc\u00b40@\u00cb\u00a1E\u00b6\u00f3\u00fd\u0003@\u009e\u00ef\u00a7\u00c6K\u00b7%@\u0087\u0016\u00d9\u00ce\u00f7\u00f30@\u0001\u0000\u0000\u0000\u0000\u0000\u00f8?\u008cl\u00e7\u00fb\u00a9q&@}?5^\u00baI0@\u00ef|?5^\u00ba\t@\u0097C\u008bl\u00e7;(@}?5^\u00ba\u00e91@.\u00b2\u009d\u00ef\u00a7\u00c6\b@2\b\u00ac\u001cZd$@}?5^\u00ba\u00c92@\u0093\u0018\u0004V\u000e-\n@\u0017\u00d9\u00ce\u00f7S\u00a3%@\u00bct\u0093\u0018\u0004\u00961@\u0098n\u0012\u0083\u00c0\u00ca\u000f@b\u0010X9\u00b4H#@\u0084\u00c0\u00ca\u00a1E\u00f60@\u001b/\u00dd$\u0006\u0081\u0007@\u00d5x\u00e9&1H*@\u00bct\u0093\u0018\u0004V2@\u00a8\u00c6K7\u0089A\u0001@\u00d8\u00a3p=\n\u0017\"@\u0012\u0083\u00c0\u00ca\u00a1\u00851@\u009c\u00c4 \u00b0rh\u0000@\u00f4\u00fd\u00d4x\u00e9\u00a6 @\u00ac\u001cZd;\u001f3@V\u000e-\u00b2\u009d\u00ef\u0005@\u0081\u0095C\u008bl'!@\u00c1\u00ca\u00a1E\u00b6\u00d32@\u0089A`\u00e5\u00d0\"\u00eb?8\u0089A`\u00e5\u0010#@\u00b4\u00c8v\u00be\u009f\u00fa1@\\\u008f\u00c2\u00f5(\\\u00cf?`\u00e5\u00d0\"\u00db\u00b9#@\u00dfO\u008d\u0097n\u00923@\u008f\u00c2\u00f5(\\\u008f\u00f0?\u0091\u00ed|?5\u009e$@~?5^\u00ba\u00893@\u00a8\u00c6K7\u0089A\u00c0?7\u0089A`\u00e5\u00d0 @<\u00dfO\u008d\u0097n4@j\u00bct\u0093\u0018\u0004\u00de?\u00aeG\u00e1z\u0014. @X9\u00b4\u00c8v\u00de1@/\u00dd$\u0006\u0081\u0095\u00f5\u00bffffff& @.\u00b2\u009d\u00ef\u00a7\u00861@`\u00e5\u00d0\"\u00db\u00f9\u0000\u00c0\u0004V\u000e-\u00b2\u001d\u001e@Zd;\u00dfOm1@L7\u0089A`\u00e5\u00f0\u00bfT\u00e3\u00a5\u009b\u00c4\u00e0!@+\u0087\u0016\u00d9\u00ce\u00b73@\u0012\u0083\u00c0\u00ca\u00a1E\u00f8\u00bf\u00e7\u00fb\u00a9\u00f1\u00d2M\u001b@\u00e6\u00d0\"\u00db\u00f9\u009e4@\u00fc\u00a9\u00f1\u00d2Mb\u00f2\u00bfNb\u0010X94\u001a@\u00e5\u00d0\"\u00db\u00f9~3@\u0002+\u0087\u0016\u00d9\u00ce\u0003\u00c0\u0003+\u0087\u0016\u00d9N\u001a@\u00b6\u00f3\u00fd\u00d4x\t3@\u00d1\"\u00db\u00f9~j\u00ec\u00bf\u00d0\u00f7S\u00e3\u00a5\u001b\u001f@0\u00dd$\u0006\u0081\u0095.@\u00a2E\u00b6\u00f3\u00fdT\u0010@\u00fc\u00a9\u00f1\u00d2M\"(@Zd;\u00dfO\u008d-@\u00a8\u00c6K7\u0089\u00c1\u0010@\u00f4\u00fd\u00d4x\u00e9f&@=\n\u00d7\u00a3p}-@`\u00e5\u00d0\"\u00db\u00f9\u0012@\u00a4p=\n\u00d7c*@>\n\u00d7\u00a3p\u00fd.@`\u00e5\u00d0\"\u00dby\u0014@\u00baI\f\u0002+\u00c7+@5^\u00baI\f\u0082+@\u00b2\u009d\u00ef\u00a7\u00c6K\u000f@\u0085\u00ebQ\u00b8\u001e\u0005,@\u001a\u0004V\u000e-2,@\u00b3\u009d\u00ef\u00a7\u00c6K\u0018@\u00aa\u00f1\u00d2Mb\u0090)@\u00fe\u00d4x\u00e9&\u00b1*@\u009a\u0099\u0099\u0099\u0099\u0099\u0017@\u0098n\u0012\u0083\u00c0\n(@8\u0089A`\u00e5\u00d0-@\u00f8S\u00e3\u00a5\u009b\u00c4\u001a@\u00f0\u00a7\u00c6K7\u00c9(@\u00a9\u00c6K7\u0089\u0081+@`\u00e5\u00d0\"\u00db\u00f9\u000f@6^\u00baI\f\u0082.@\u0012\u0083\u00c0\u00ca\u00a1\u00c5*@\u00ea&1\b\u00ac\u009c\u001b@th\u0091\u00ed|\u00bf+@8\u0089A`\u00e5P)@8\u0089A`\u00e5P\u0019@9\u00b4\u00c8v\u00be\u00df,@@5^\u00baIL,@\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u001c@r=\n\u00d7\u00a30-@\u00ecQ\u00b8\u001e\u0085\u00ab)@\u00e9&1\b\u00ac\\ @\u001a\u0004V\u000e-r*@ \u0085\u00ebQ\u00b8\u001e(@\u00ecQ\u00b8\u001e\u0085k\u001f@8\u0089A`\u00e5\u0010)@\u0094\u0018\u0004V\u000e-+@P\u008d\u0097n\u0012C!@\u00d2\"\u00db\u00f9~*)@G\u00b6\u00f3\u00fd\u00d4x(@\u00c1\u00ca\u00a1E\u00b63\"@G\u00b6\u00f3\u00fd\u00d4x,@\u009d\u00c4 \u00b0r\u00e8&@D\u008bl\u00e7\u00fb)!@\u007fj\u00bct\u0093\u0098-@\u007fj\u00bct\u0093X'@\u00ee|?5^\u00ba#@^\u00baI\f\u0002k+@\u00f1\u00a7\u00c6K7\u0089*@\u00c3\u00f5(\\\u008f\u0082#@\u00bct\u0093\u0018\u0004\u0016.@\u0005V\u000e-\u00b2\u009d)@*\\\u008f\u00c2\u00f5\u00e8$@\u00cb\u00a1E\u00b6\u00f3=/@\u00fa~j\u00bct\u0093+@\u00a8\u00c6K7\u0089A\"@&\u0006\u0081\u0095CK/@\u00b9\u001e\u0085\u00ebQ\u00b8+@9\u00b4\u00c8v\u00be\u009f$@L7\u0089A`\u00e5,@\u00d2\"\u00db\u00f9~\u00aa)@0\u00dd$\u0006\u0081\u0095\n@\u00baI\f\u0002+\u0087*@=\n\u00d7\u00a3p\u00bd)@\u00fc\u00a9\u00f1\u00d2Mb\f@\u00e8\u00fb\u00a9\u00f1\u00d2\u008d(@\u0019\u0004V\u000e-r'@\n\u00d7\u00a3p=\n\u0004@gffff\u00a6+@\u0007\u0081\u0095C\u008b\u00ec&@\u00b2\u009d\u00ef\u00a7\u00c6K\u0007@\u00b4\u00c8v\u00be\u009f\u009a-@\u0006\u0081\u0095C\u008b\u00ec'@\u00fe\u00d4x\u00e9&1\u00f0?S\u00b8\u001e\u0085\u00ebQ,@*\\\u008f\u00c2\u00f5\u00e8$@\u00cf\u00f7S\u00e3\u00a5\u009b\u0004@\u0083\u00c0\u00ca\u00a1E\u00f6)@\u00aeG\u00e1z\u0014.%@\u00aeG\u00e1z\u0014\u00ae\u0001@\u00c9v\u00be\u009f\u001a\u00ef'@\u00ecQ\u00b8\u001e\u0085k#@\u00cav\u00be\u009f\u001a/\u00ff?_\u00baI\f\u0002\u00eb*@\f\u0002+\u0087\u0016\u0099&@\u000e-\u00b2\u009d\u00ef\u00a7\u00de?Nb\u0010X9\u00f4-@H\u00e1z\u0014\u00ae\u00c7#@Y9\u00b4\u00c8v\u00be\u000f@\u0006\u0081\u0095C\u008b\u00ac)@\u0093\u0018\u0004V\u000e-%@\u0017\u00d9\u00ce\u00f7Sc\u0012@\u00c6 \u00b0rh\u0091(@{\u0014\u00aeG\u00e1\u00fa @v\u0093\u0018\u0004V\u000e\u000e@\u0006\u0081\u0095C\u008bl(@\u0098n\u0012\u0083\u00c0J @\u001c/\u00dd$\u0006\u0001\u0013@8\u0089A`\u00e5\u00d0'@\u0000\u0000\u0000\u0000\u0000\u0000\u001f@\u00a2E\u00b6\u00f3\u00fd\u00d4\n@\u00a2E\u00b6\u00f3\u00fd\u00d4)@-\u00b2\u009d\u00ef\u00a7\u0006!@\u00e6\u00d0\"\u00db\u00f9~\b@\u00a9\u00c6K7\u0089\u00c1&@\u0000\u0000\u0000\u0000\u0000\u0080#@;\u00dfO\u008d\u0097n\u0012@\u001c/\u00dd$\u0006\u0081,@\u00b8\u001e\u0085\u00ebQx%@sh\u0091\u00ed|\u00bf\u0012@\u00ecQ\u00b8\u001e\u0085k-@\u0017\u00d9\u00ce\u00f7Sc\"@!\u00b0rh\u0091\u00ed\u000f@\u000f-\u00b2\u009d\u00ef\u00e7-@o\u0012\u0083\u00c0\u00ca\u00a1\"@\u009c\u00c4 \u00b0rh\u0016@i\u0091\u00ed|?u,@\u00f9S\u00e3\u00a5\u009b\u0004*@ \u0085\u00ebQ\u00b8\u001e\u00dd?1\b\u00ac\u001cZ$+@$\u00db\u00f9~j\u00fc*@\u00e2z\u0014\u00aeG\u00e1\u00ee?<\u00dfO\u008d\u0097\u00ae)@\u00dd$\u0006\u0081\u0095C+@433333\u00eb\u00bfP\u008d\u0097n\u0012\u00c3+@\u00f8S\u00e3\u00a5\u009b\u00c4,@}?5^\u00baI\u00f0\u00bf,\u0087\u0016\u00d9\u00ce7*@\u0093\u0018\u0004V\u000e-)@1\b\u00ac\u001cZd\u0000\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2+@\u00fa~j\u00bct\u00d3,@\u0081\u0095C\u008bl\u00e7\u00e7\u00bf'1\b\u00ac\u001cZ.@@5^\u00baI\u00cc-@\u0019\u0004V\u000e-\u00b2\u00cd?&\u0006\u0081\u0095C\u008b.@\u0087\u0016\u00d9\u00ce\u00f7\u0093+@\u00d8\u00a3p=\n\u00d7\u00eb\u00bf\u001eZd;\u00df\u000f0@_\u00baI\f\u0002+(@\u00d7\u00a3p=\n\u00d7\u0003\u00c0\u0083\u00c0\u00ca\u00a1E\u00f6-@\u00b2\u009d\u00ef\u00a7\u00c6\u000b/@\u00a0\u001a/\u00dd$\u0006\u00fd\u00bf\u00ef|?5^\u00ba.@-\u00b2\u009d\u00ef\u00a7\u0086/@\u00a6\u009b\u00c4 \u00b0r\u0005\u00c0\u00cf\u00f7S\u00e3\u00a5\u001b-@Zd;\u00dfO\r0@d;\u00dfO\u008d\u0097\u00fc\u00bfm\u00e7\u00fb\u00a9\u00f1r0@I\u00e1z\u0014\u00aeG(@%\u0006\u0081\u0095C\u008b\u0003\u00c0\u0081\u0095C\u008blg)@[d;\u00dfOM)@j\u00bct\u0093\u0018\u0004\u0001\u00c0b\u0010X9\u00b4\u00c8'@+\u0087\u0016\u00d9\u00ce7&@\u00e9&1\b\u00ac\u001c\f\u00c0V\u000e-\u00b2\u009d/)@|\u0014\u00aeG\u00e1\u00fa$@\u00fa~j\u00bct\u0093\u000b\u00c0\u0096C\u008bl\u00e7\u00fb*@\u00e7\u00fb\u00a9\u00f1\u00d2\u008d'@%\u0006\u0081\u0095C\u008b\u0013\u00c0-\u00b2\u009d\u00ef\u00a7F)@\u0084\u00c0\u00ca\u00a1Ev$@th\u0091\u00ed|?\n\u00c0w\u00be\u009f\u001a/\u009d&@\u00aa\u00f1\u00d2Mb\u00d0%@\u000e-\u00b2\u009d\u00ef\u00a7\t\u00c0^\u00baI\f\u0002\u00eb$@\u0002+\u0087\u0016\u00d9N)@\u00ecQ\u00b8\u001e\u0085k\u0014\u00c01\b\u00ac\u001cZ\u00a4'@1\b\u00ac\u001cZ\u00e4\"@\u001f\u0085\u00ebQ\u00b8\u001e\u0000\u00c0^\u00baI\f\u0002\u00ab&@\u00fc\u00a9\u00f1\u00d2M\"\"@333333\u00fd\u00bfr=\n\u00d7\u00a3\u00b0(@\u00be\u009f\u001a/\u00dd$!@w\u00be\u009f\u001a/\u00dd\u0001\u00c0^\u00baI\f\u0002k%@u\u0093\u0018\u0004V\u008e\"@\u00a4p=\n\u00d7#\u0012\u00c0\u00db\u00f9~j\u00bct&@\u00be\u009f\u001a/\u00dd$!@\u009a\u0099\u0099\u0099\u0099\u0019\u0012\u00c0\u00ad\u001cZd;\u001f(@\u0000\u0000\u0000\u0000\u0000\u0080!@y\u00e9&1\b,\u0011\u00c0\u00c7K7\u0089A\u00a0$@\u00cd\u00cc\u00cc\u00cc\u00cc\u008c#@P\u008d\u0097n\u0012\u0003\u0016\u00c0v\u0093\u0018\u0004VN&@Nb\u0010X94$@\u0017\u00d9\u00ce\u00f7S\u00e3\u00e5\u00bf\u001dZd;\u00df\u00cf%@\u00cav\u00be\u009f\u001a\u00ef$@S\u00b8\u001e\u0085\u00ebQ\u00e8\u00bfj\u00bct\u0093\u0018\u00c4#@\u0006\u0081\u0095C\u008b\u00ac\"@\u001c/\u00dd$\u0006\u0081\u00b5?\u00a8\u00c6K7\u0089\u0001&@\u00cc\u00a1E\u00b6\u00f3\u00bd%@\u001f\u0085\u00ebQ\u00b8\u001e\u00d5\u00bf!\u00b0rh\u0091-'@\u00baI\f\u0002+\u00c7&@\u00cc\u00a1E\u00b6\u00f3\u00fd\u0016\u00c0\u0005V\u000e-\u00b2\u001d+@\u009d\u00c4 \u00b0r\u00a8%@\u008cl\u00e7\u00fb\u00a9q\u0015\u00c0\u0092\u00ed|?5\u009e,@\u00f5\u00fd\u00d4x\u00e9&'@\u00ac\u001cZd;\u00df\u001c\u00c0\u009c\u00c4 \u00b0r\u00e8*@`\u00e5\u00d0\"\u00db\u00b9'@\u00d0\u00f7S\u00e3\u00a5\u009b\u001d\u00c0\u00bct\u0093\u0018\u0004\u00d6(@\u00d2\"\u00db\u00f9~\u00aa$@`\u00e5\u00d0\"\u00db9 \u00c0\t\u00ac\u001cZd{+@\u00fb~j\u00bct\u0093)@\u0006\u0081\u0095C\u008b\u00ec\u001e\u00c0\u0010X9\u00b4\u00c8\u00b6,@\u0002+\u0087\u0016\u00d9\u00ce)@\u00fc\u00a9\u00f1\u00d2M\u00a2!\u00c0\u0089A`\u00e5\u00d0\u00a2,@Nb\u0010X9\u00f4(@;\u00dfO\u008d\u0097\u00ee\u001d\u00c0sh\u0091\u00ed|\u00bf.@H\u00e1z\u0014\u00ae\u00c7$@\u0019\u0004V\u000e-\u00b2\"\u00c0T\u00e3\u00a5\u009b\u00c4`+@M7\u0089A`e,@1\b\u00ac\u001cZd\u001c\u00c0\u00b0rh\u0091\u00ed\u00fc+@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc,@\\\u008f\u00c2\u00f5(\\\u001d\u00c0\u00f4\u00fd\u00d4x\u00e9\u00e6)@\u00d9\u00ce\u00f7S\u00e3%,@\u00a0\u001a/\u00dd$\u0006\u0018\u00c0\u00ad\u001cZd;\u001f,@\u00d3Mb\u0010Xy.@\u00ecQ\u00b8\u001e\u0085k\u001e\u00c0\u00b0rh\u0091\u00ed\u00fc-@5^\u00baI\f\u00c2-@ffffff\u001e\u00c0\u00d9\u00ce\u00f7S\u00e3\u00050@\u00d0\u00f7S\u00e3\u00a5\u001b/@`\u00e5\u00d0\"\u00db9!\u00c0G\u00b6\u00f3\u00fd\u00d4x-@\u00d1\"\u00db\u00f9~\u008a0@\u0011X9\u00b4\u00c8\u00f6\u001a\u00c043333\u00f3-@h\u0091\u00ed|?51@\u0081\u0095C\u008bl\u00e7\u001c\u00c0\u00e1z\u0014\u00aeGa/@;\u00dfO\u008d\u0097\u000e1@1\b\u00ac\u001cZ\u00e4\u001a\u00c0\u008e\u0097n\u0012\u0083\u0000,@\u0012\u0083\u00c0\u00ca\u00a1E0@;\u00dfO\u008d\u0097n\u0015\u00c0M7\u0089A`\u00e5.@\u0087\u0016\u00d9\u00ce\u00f7S/@\u00da\u00ce\u00f7S\u00e3%\u0015\u00c0o\u0012\u0083\u00c0\u00caA0@\u0083\u00c0\u00ca\u00a1E\u00161@`\u00e5\u00d0\"\u00db\u00f9\u0013\u00c0n\u00e7\u00fb\u00a9\u00f1\u00d2/@\u00f2\u00d2Mb\u0010\u00180@\u0096C\u008bl\u00e7{\u0012\u00c0\u00e0O\u008d\u0097n\u0092-@\u00dc\u00f9~j\u00bct\"@Q\u008d\u0097n\u0012\u0003\u001e\u00c0\u0082\u0095C\u008blg,@\u00baI\f\u0002+\u0087\"@\n\u00d7\u00a3p=\n\u001a\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6,@\u0011X9\u00b4\u00c8\u00f6\u001f@#\u00db\u00f9~j< \u00c0\u00f5\u00fd\u00d4x\u00e9&-@\u00f1\u00a7\u00c6K7\u0089\u001f@j\u00bct\u0093\u0018\u00c4!\u00c0\u0092\u00ed|?5\u009e+@\u00ecQ\u00b8\u001e\u0085\u00eb\u001a@\u00c6 \u00b0rh\u0011\u001d\u00c0\u0099n\u0012\u0083\u00c0\u00ca,@\u00a2E\u00b6\u00f3\u00fd\u0014 @\u0089A`\u00e5\u00d0\u00a2!\u00c0\u00e3\u00a5\u009b\u00c4 \u00f0/@\u00c5 \u00b0rh\u0011\"@\u0093\u0018\u0004V\u000e-\"\u00c0\u00db\u00f9~j\u00bcT0@\u00b9\u001e\u0085\u00ebQ8\u001e@\u0014\u00aeG\u00e1z\u0094#\u00c0\u0085\u00ebQ\u00b8\u001e\u00c5/@\u00b8\u001e\u0085\u00ebQ8\u001b@,\u0087\u0016\u00d9\u00ce\u00f7\u0017\u00c0\u00d4Mb\u0010Xy,@(1\b\u00ac\u001c\u00da\u001d@X9\u00b4\u00c8v> \u00c0\u00cb\u00a1E\u00b6\u00f3\u001d1@\u00e8\u00fb\u00a9\u00f1\u00d2\u00cd\u001f@\u00fc\u00a9\u00f1\u00d2M\u00e2\u001b\u00c0sh\u0091\u00ed|\u007f1@T\u00e3\u00a5\u009b\u00c4 !@\"\u00b0rh\u0091\u00ed\u0019\u00c0\u00ee|?5^\u00da0@\u00f0\u00a7\u00c6K7\t\u001f@M7\u0089A`\u00e5\u001a\u00c0\u00c1\u00ca\u00a1E\u00b6s2@\u008d\u0097n\u0012\u0083@\u001a@\u00c7K7\u0089A !\u00c0\n\u00d7\u00a3p=\u00ca1@\u001b/\u00dd$\u0006\u0001\u0016@X9\u00b4\u00c8v>\u001f\u00c0!\u00b0rh\u0091--@\u008bl\u00e7\u00fb\u00a9\u00f1\u0015@T\u00e3\u00a5\u009b\u00c4\u00a0!\u00c0\u00e9&1\b\u00ac\\-@h\u0091\u00ed|?\u00b5\u0010@\u00d0\u00f7S\u00e3\u00a5\u009b\u001c\u00c0\u0086\u00ebQ\u00b8\u001e\u00c5,@\u00a0\u001a/\u00dd$\u0006\u0011@\u0010X9\u00b4\u00c8v\u001a\u00c0\u00c7K7\u0089A\u00e0*@(1\b\u00ac\u001cZ\u000f@o\u0012\u0083\u00c0\u00ca!\u0018\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2.@\u0099n\u0012\u0083\u00c0\u00ca\b@\u00d1\"\u00db\u00f9~j \u00c0\u008d\u0097n\u0012\u0083\u00c0,@\u00db\u00f9~j\u00bct\u0001@\u00c4\u00f5(\\\u008f\u00c2\u001e\u00c0\u00aeG\u00e1z\u0014.,@)\\\u008f\u00c2\u00f5(\t@\u00c5 \u00b0rh\u00d1!\u00c0\u0088\u0016\u00d9\u00ce\u00f7\u0013+@P\u008d\u0097n\u0012\u0083\t@,\u0087\u0016\u00d9\u00cew\u0014\u00c0\u00f1\u00a7\u00c6K7\t.@!\u00b0rh\u0091\u00ed\u0006@X9\u00b4\u00c8v\u00be!\u00c0X9\u00b4\u00c8v~/@U\u00e3\u00a5\u009b\u00c4 \u000e@\u00f4\u00fd\u00d4x\u00e9f\"\u00c0\u008aA`\u00e5\u00d0B0@/\u00dd$\u0006\u0081\u0095\u0002@\u0098n\u0012\u0083\u00c0J \u00c0\u00b4\u00c8v\u00be\u009fZ0@\u0082\u0095C\u008bl\u00e7\u00ff?\n\u00d7\u00a3p=J$\u00c0\u009a\u0099\u0099\u0099\u0099Y/@\u00e5\u00d0\"\u00db\u00f9~\u0004@sh\u0091\u00ed|\u007f&\u00c0c\u0010X9\u00b4\b/@\u00b1rh\u0091\u00ed|\u00e7?\u00d1\"\u00db\u00f9~*$\u00c0\u00a6\u009b\u00c4 \u00b0r/@;\u00dfO\u008d\u0097\u00ee\u0011@\u00e2z\u0014\u00aeGa\u0018\u00c0\u008e\u0097n\u0012\u0083\u00a00@\u009e\u00ef\u00a7\u00c6K7\u0014@\u00f1\u00a7\u00c6K7\u0089\u001b\u00c0\u00f0\u00a7\u00c6K7\u00e90@\u00a8\u00c6K7\u0089A\u0011@F\u00b6\u00f3\u00fd\u00d4\u00f8\u0013\u00c0\u00ac\u001cZd;\u009f1@5^\u00baI\f\u0002\n@\u00ea&1\b\u00ac\u001c\u0013\u00c0\u009e\u00ef\u00a7\u00c6K\u00b71@Zd;\u00dfO\r\u0014@\u0005V\u000e-\u00b2\u009d\r\u00c0\u00baI\f\u0002+'1@\u000e-\u00b2\u009d\u00ef\u00a7\u0013@\u00e9&1\b\u00ac\u001c\u0015\u00c0\u00aa\u00f1\u00d2Mb\u00f02@\u00c9v\u00be\u009f\u001a/\u0013@\u00ecQ\u00b8\u001e\u0085k\u0011\u00c0\u001f\u0085\u00ebQ\u00b8~3@\u00ac\u001cZd;\u00df\u0017@\u00a1\u001a/\u00dd$\u0006\u0016\u00c0!\u00b0rh\u0091\u00cd2@sh\u0091\u00ed|\u00bf\u0011@\u000e-\u00b2\u009d\u00ef\u00a7\u0004\u00c0\u00ac\u001cZd;?1@\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0010@\\\u008f\u00c2\u00f5(\\\u0019\u00c0V\u000e-\u00b2\u009d\u00af3@T\u00e3\u00a5\u009b\u00c4\u00a0\u0012@\u00f7(\\\u008f\u00c2u\u001a\u00c0Nb\u0010X9\u00d44@\u00fc\u00a9\u00f1\u00d2Mb\t@\u00c8K7\u0089A`\u001b\u00c0d;\u00dfO\u008d73@G\u00b6\u00f3\u00fd\u00d4x\u0018@\u00a2E\u00b6\u00f3\u00fd\u00d4\u000e\u00c0L7\u0089A`e0@\u00a0\u001a/\u00dd$\u0006\u001a@j\u00bct\u0093\u0018\u0004\u0013\u00c0\u0098n\u0012\u0083\u00c0*0@\u00b6\u00f3\u00fd\u00d4xi\u001b@\u00f3\u00d2Mb\u0010X\u0006\u00c0\u00da\u00ce\u00f7S\u00e3e/@\u00b4\u00c8v\u00be\u009f\u001a\u001c@\u00f2\u00d2Mb\u0010X\u00ff\u00bfT\u00e3\u00a5\u009b\u00c4`0@\u00dd$\u0006\u0081\u0095\u00c3\u0018@\u008bl\u00e7\u00fb\u00a9\u00f1\u0001\u00c0\u00c8K7\u0089A\u00e0,@\u008cl\u00e7\u00fb\u00a9q @$\u00db\u00f9~j\u00bc\n\u00c0\n\u00d7\u00a3p=J.@T\u00e3\u00a5\u009b\u00c4`!@%\u0006\u0081\u0095C\u008b\u0003\u00c06^\u00baI\f\u0082-@\u008e\u0097n\u0012\u0083\u0000 @\u00d6x\u00e9&1\b\u0010\u00c0\u00ac\u001cZd;\u009f,@\u000e-\u00b2\u009d\u00ef\u00a7\u0019@\u0088\u0016\u00d9\u00ce\u00f7S\u00f1\u00bf\u000e-\u00b2\u009d\u00ef',@\u00d3Mb\u0010X9\"@;\u00dfO\u008d\u0097n\u0010\u00c0\u008d\u0097n\u0012\u0083 0@\u00db\u00f9~j\u00bc4#@\u000e-\u00b2\u009d\u00ef\u00a7\u0014\u00c0~?5^\u00ba\u0089/@\u0000\u0000\u0000\u0000\u0000@\"@\u00e6\u00d0\"\u00db\u00f9~\r\u00c0\u00a0\u001a/\u00dd$F1@U\u00e3\u00a5\u009b\u00c4\u00a0\u0015@h\u0091\u00ed|?5\t\u00c0\u00bbI\f\u0002+\u0087+@\"\u00b0rh\u0091m\u0015@^\u00baI\f\u0002+\u0010\u00c0G\u00b6\u00f3\u00fd\u00d4x,@\u00bct\u0093\u0018\u0004\u00d6\u0011@\u00fc\u00a9\u00f1\u00d2Mb\u0006\u00c0\u00f1\u00a7\u00c6K7I)@\u00b8\u001e\u0085\u00ebQ\u00b8\u0013@J\f\u0002+\u0087\u0016\u0000\u00c0\u00f2\u00d2Mb\u0010\u0018(@\u00aeG\u00e1z\u0014\u00ae\t@\u00d3Mb\u0010X9\u0000\u00c0,\u0087\u0016\u00d9\u00cew*@1\b\u00ac\u001cZd\u0010@\u00fa~j\u00bct\u0013\u0010\u00c0\u0002+\u0087\u0016\u00d9\u008e'@\u009e\u00ef\u00a7\u00c6K7\u000e@\u00ea&1\b\u00ac\u001c\u0013\u00c0\u0010X9\u00b4\u00c8\u00f6(@\u0092\u00ed|?5^\u0006@333333\u00f1\u00bf\u00a3E\u00b6\u00f3\u00fdT)@b\u0010X9\u00b4\u00c8\u0007@B`\u00e5\u00d0\"\u00db\u000e\u00c0)\\\u008f\u00c2\u00f5h%@\u008f\u00c2\u00f5(\\\u008f\u0007@w\u00be\u009f\u001a/\u00dd\u0012\u00c0/\u00dd$\u0006\u0081\u0015$@\u00f1\u00a7\u00c6K7\u0089\u00ff?\u0080j\u00bct\u0093\u0018\r\u00c0x\u00be\u009f\u001a/\u001d&@\u0007\u0081\u0095C\u008bl\t@\u009c\u00c4 \u00b0rh\b\u00c0#\u00db\u00f9~j\u00fc#@\u00fa~j\u00bct\u0013\u0015@d;\u00dfO\u008d\u0017\u0012\u00c0~?5^\u00ba\t&@\u00a2E\u00b6\u00f3\u00fdT\u0017@\u00de$\u0006\u0081\u0095C\r\u00c0\u001f\u0085\u00ebQ\u00b8^%@B`\u00e5\u00d0\"[\u0014@M7\u0089A`\u00e5\u0014\u00c0\u00b6\u00f3\u00fd\u00d4xi$@%\u0006\u0081\u0095C\u008b\u0017@;\u00dfO\u008d\u0097\u00ee\u0013\u00c0\u0015\u00aeG\u00e1z\u0094'@V\u000e-\u00b2\u009d\u00ef\u0005@\n\u00d7\u00a3p=\n\u0003\u00c0\u00fd\u00a9\u00f1\u00d2M\u00e2,@\u0003+\u0087\u0016\u00d9\u00ce\b@333333\t\u00c0|\u0014\u00aeG\u00e1\u00fa-@6^\u00baI\f\u0002\u00fb?\u00b9\u001e\u0085\u00ebQ\u00b8\u00fa\u00bfz\u00e9&1\b,.@\u00e0O\u008d\u0097n\u0012\u00ef?\u0000\u0000\u0000\u0000\u0000\u0000\u00f6\u00bfT\u00e3\u00a5\u009b\u00c4\u00a0,@\u0002+\u0087\u0016\u00d9\u00ce\u0001@\u0093\u0018\u0004V\u000e-\u00d2\u00bf\u0000\u0000\u0000\u0000\u0000\u0000/@\u00d3Mb\u0010X9\u00f2?Nb\u0010X9\u00b4\u0004\u00c0\u00d3Mb\u0010X90@\u00e9&1\b\u00ac\u001c\u00e6?\u00d6x\u00e9&1\b\f\u00c0_\u00baI\f\u0002\u00ab/@\u00f2\u00d2Mb\u0010X\u0000@1\b\u00ac\u001cZd\u0006\u00c0y\u00e9&1\b\u00cc0@\u0099n\u0012\u0083\u00c0\u00ca\u00f7?ffffff\u00e6?43333\u00b3.@Zd;\u00dfO\u008d\u00b7?\u0006\u0081\u0095C\u008bl\u00fd\u00bf\u0089A`\u00e5\u00d0\"1@\u00b8\u001e\u0085\u00ebQ\u00b8\u00e2?\u00e1z\u0014\u00aeG\u00e1\u00f0\u00bfR\u00b8\u001e\u0085\u00eb\u00b11@\u00db\u00f9~j\u00bct\u00d3\u00bf\u00e3\u00a5\u009b\u00c4 \u00b0\u0004\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u00d31@\u00f8S\u00e3\u00a5\u009b\u00c4\u00f0\u00bf\n\u00d7\u00a3p=\n\u00f5\u00bf\u00c7K7\u0089A`0@\u00fe\u00d4x\u00e9&1\u00e8\u00bf\u00bct\u0093\u0018\u0004V\u00de\u00bf{\u0014\u00aeG\u00e1z/@<\u00dfO\u008d\u0097n\u00fa\u00bf\u0014\u00aeG\u00e1z\u0014\u00ee\u00bf\u00c1\u00ca\u00a1E\u00b631@\n\u00d7\u00a3p=\n\u00fd\u00bf\u00f4\u00fd\u00d4x\u00e9&\u0003\u00c0\u0018\u00d9\u00ce\u00f7S#/@\u000e-\u00b2\u009d\u00ef\u00a7\u00f2\u00bf\u00dd$\u0006\u0081\u0095C\u0006\u00c0\u00e0O\u008d\u0097n\u0092-@Nb\u0010X9\u00b4\u00fe\u00bf\u00a9\u00c6K7\u0089A\t\u00c0J\f\u0002+\u0087V0@\u008e\u0097n\u0012\u0083\u00c0\b\u00c0\u00e2z\u0014\u00aeG\u00e1\u00fe\u00bf\u00cav\u00be\u009f\u001a\u00ef-@8\u0089A`\u00e5\u00d0\u0007\u00c0 \u0085\u00ebQ\u00b8\u001e\u00f7\u00bf!\u00b0rh\u0091-,@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\f\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u00f4\u00bf\u0092\u00ed|?5\u001e/@8\u0089A`\u00e5\u00d0\r\u00c0Ob\u0010X9\u00b4\u0005\u00c0\u0094\u0018\u0004V\u000e\u00ad-@\u008aA`\u00e5\u00d0\"\f@\u00cb\u00a1E\u00b6\u00f3\u00fd\u00c4\u00bf\u0007\u0081\u0095C\u008b\u00ac/@\u0081\u0095C\u008blg\u0010@`\u00e5\u00d0\"\u00db\u00f9\u00ee\u00bf=\n\u00d7\u00a3p\u00fd/@\u0004V\u000e-\u00b2\u009d\u0010@\u0010X9\u00b4\u00c8v\u00f2?R\u00b8\u001e\u0085\u00eb\u00110@.\u00b2\u009d\u00ef\u00a7\u00c6\f@\u00a5p=\n\u00d7\u00a3\u00fc?\u001b/\u00dd$\u0006\u00c10@\u00f6(\\\u008f\u00c2u\u0011@$\u00db\u00f9~j\u00bc\u00fe?\u00ef|?5^z-@\u00e7\u00fb\u00a9\u00f1\u00d2M\u0016@B`\u00e5\u00d0\"\u00db\u00ed?\u00a2E\u00b6\u00f3\u00fd\u00b40@\u0085\u00ebQ\u00b8\u001e\u0085\u0018@\u0086\u00ebQ\u00b8\u001e\u0085\u00cb?{\u0014\u00aeG\u00e1\u001a0@\u00b4\u00c8v\u00be\u009f\u009a\u0015@ffffff\u00e2?{\u0014\u00aeG\u00e1\u00ba1@/\u00dd$\u0006\u0081\u0015\u0010@\u00b1rh\u0091\u00ed|\b@\u00ad\u001cZd;_-@333333\u0019@\u008bl\u00e7\u00fb\u00a9\u00f1\u0000@-\u00b2\u009d\u00ef\u00a7\u00c60@Zd;\u00dfO\u008d\u001c@\\\u008f\u00c2\u00f5(\\\u00ff?\u00d7\u00a3p=\nW0@b\u0010X9\u00b4H\u0013@\u0093\u0018\u0004V\u000e-\u00f4?\u0089A`\u00e5\u00d0b+@\u00dd$\u0006\u0081\u0095\u00c3\u0013@J\f\u0002+\u0087\u0016\u00d1?h\u0091\u00ed|?\u00b5+@\u000e-\u00b2\u009d\u00ef\u00a7\u0013@\u00b8\u001e\u0085\u00ebQ\u00b8\u00fe?\u0094\u0018\u0004V\u000e\u00ad(@\u00c9v\u00be\u009f\u001a\u00af\u0016@\u0004V\u000e-\u00b2\u009d\u0005@m\u00e7\u00fb\u00a9\u00f1\u00d2(@Nb\u0010X9\u00b4\f@\u00be\u009f\u001a/\u00dd$\u0004@\u0012\u0083\u00c0\u00ca\u00a1\u00c5'@\u00fc\u00a9\u00f1\u00d2M\u00e2\u0015@[d;\u00dfO\u008d\u00eb?\u00d8\u00a3p=\n\u00d7&@\u0094\u0018\u0004V\u000e\u00ad\u0013@\u00db\u00f9~j\u00bct\u00b3\u00bf\u001a\u0004V\u000e-\u00f2&@%\u0006\u0081\u0095C\u000b\u001a@\r\u0002+\u0087\u0016\u00d9\u00e6?\u00e3\u00a5\u009b\u00c4 p'@\u00ad\u001cZd;\u00df\u000b@\u000f-\u00b2\u009d\u00ef\u00a7\r@\u00b2\u009d\u00ef\u00a7\u00c6K'@m\u00e7\u00fb\u00a9\u00f1R\u0016@\u0098n\u0012\u0083\u00c0\u00ca\u00f3?\n\u00d7\u00a3p=\u00ca#@\u00c3\u00f5(\\\u008fB\u0018@Nb\u0010X9\u00b4\u0001@\u0098n\u0012\u0083\u00c0\u00ca#@\u00d6x\u00e9&1\b\u001a@\u001f\u0085\u00ebQ\u00b8\u001e\u00c5?\u00fc\u00a9\u00f1\u00d2Mb\"@\u008e\u0097n\u0012\u0083\u00c0\u001d@\u0000\u0000\u0000\u0000\u0000\u0000\u00c0?\u00baI\f\u0002+\u0087#@\u00c6 \u00b0rh\u0011\u001b@\u00cc\u00a1E\u00b6\u00f3\u00fd\u00e0?y\u00e9&1\bl @\u00d3Mb\u0010X9\u0018@\u00be\u009f\u001a/\u00dd$\u00ea\u00bfu\u0093\u0018\u0004V\u000e\"@\u00e9&1\b\u00ac\u001c\u0011@\u00b7\u00f3\u00fd\u00d4x\u00e9\u00f4?\f\u0002+\u0087\u0016\u0019\"@\u00e8\u00fb\u00a9\u00f1\u00d2M\u0012@\u00fc\u00a9\u00f1\u00d2Mb\u00f6?\u00baI\f\u0002+\u0007 @\u0083\u00c0\u00ca\u00a1E\u00b6\r@\u00b0rh\u0091\u00ed|\u0001@\u00cav\u00be\u009f\u001a\u00af\"@\u008e\u0097n\u0012\u0083\u00c0\r@Nb\u0010X9\u00b4\u00d8?!\u00b0rh\u0091m\"@D\u008bl\u00e7\u00fb\u00a9\u0003@X9\u00b4\u00c8v\u00be\u00fb?\"\u00b0rh\u0091\u00ed'@^\u00baI\f\u0002+\u0005@\"\u00b0rh\u0091\u00ed\u00e8?\u00d3Mb\u0010Xy(@6^\u00baI\f\u0002\u00f1?\u0012\u0083\u00c0\u00ca\u00a1E\u0001@}?5^\u00ba\u00c9'@\u0089A`\u00e5\u00d0\"\u00eb?B`\u00e5\u00d0\"\u00db\u0001@fffff\u00a6%@*\\\u008f\u00c2\u00f5(\u00e8?\u00cf\u00f7S\u00e3\u00a5\u009b\u000b@,\u0087\u0016\u00d9\u00ce\u00f7(@\u00b8\u001e\u0085\u00ebQ\u00b8\u009e?\u00dd$\u0006\u0081\u0095C\u00f1?;\u00dfO\u008d\u0097\u00ae(@\u0098n\u0012\u0083\u00c0\u00ca\u00c1?]\u008f\u00c2\u00f5(\\\u00eb?Zd;\u00dfO\u00cd*@;\u00dfO\u008d\u0097n\u00d2?\u009c\u00c4 \u00b0rh\u00c1?F\u00b6\u00f3\u00fd\u00d4\u00b8'@\u00c9v\u00be\u009f\u001a/\u00ad?\u00f8S\u00e3\u00a5\u009bD\u0011@gffff\u00e6'@<\u00dfO\u008d\u0097n\u00f4\u00bf\u00b8\u001e\u0085\u00ebQ\u00b8\u00f6?Nb\u0010X9\u00f4'@R\u00b8\u001e\u0085\u00ebQ\u00fe\u00bf\u00e9&1\b\u00ac\u001c\u00e6?\u0081\u0095C\u008bl'(@\u00db\u00f9~j\u00bct\u00f3?\u00e6\u00d0\"\u00db\u00f9~\f@\u00fe\u00d4x\u00e9&q+@B`\u00e5\u00d0\"\u00db\u00f9?\u00d6x\u00e9&1\b\u0006@d;\u00dfO\u008dW,@\u00cc\u00a1E\u00b6\u00f3\u00fd\u00f0?\u00d9\u00ce\u00f7S\u00e3%\u0013@,\u0087\u0016\u00d9\u00ce\u00f7,@333333\u00b3?\u00e8\u00fb\u00a9\u00f1\u00d2\u00cd\u0014@\u00bbI\f\u0002+\u0087,@\u0087\u0016\u00d9\u00ce\u00f7S\u00ff?\u00b0rh\u0091\u00ed\u00fc\u0017@\\\u008f\u00c2\u00f5(\u001c,@\u00f4\u00fd\u00d4x\u00e9&\u00f3?\u00d1\"\u00db\u00f9~j\u0011@o\u0012\u0083\u00c0\u00ca\u00010@\u00a3E\u00b6\u00f3\u00fd\u00d4\u00f6?\u008f\u00c2\u00f5(\\\u000f\u0015@R\u00b8\u001e\u0085\u00eb\u00910@\u0012\u0083\u00c0\u00ca\u00a1E\u0000@\u00d3Mb\u0010X9\r@\u00d6x\u00e9&1\b0@\u0012\u0083\u00c0\u00ca\u00a1E\u00f6?]\u008f\u00c2\u00f5(\\\u001c@\u00bbI\f\u0002+\u0087+@\u00fa~j\u00bct\u0093x\u00bfG\u00b6\u00f3\u00fd\u00d4x\r@\u00a0\u001a/\u00dd$\u00860@\u00db\u00f9~j\u00bct\u00eb\u00bf\u00c1\u00ca\u00a1E\u00b6s\u0011@\u00b6\u00f3\u00fd\u00d4x\u00a90@F\u00b6\u00f3\u00fd\u00d4x\u00d1\u00bf\u00a3E\u00b6\u00f3\u00fd\u00d4\u0006@\u00b0rh\u0091\u00ed\u00bc/@\u00cb\u00a1E\u00b6\u00f3\u00fd\u00d4?\u00f2\u00d2Mb\u0010X\b@o\u0012\u0083\u00c0\u00ca\u00e11@h\u0091\u00ed|?5\u00f0?Nb\u0010X9\u00b4\u0001@\u00fe\u00d4x\u00e9&\u00b11@\u00fc\u00a9\u00f1\u00d2Mb\u00e8?\u00ac\u001cZd;\u00df\r@{\u0014\u00aeG\u00e1\u009a2@\u008bl\u00e7\u00fb\u00a9\u00f1\u00ea\u00bf\u00e0O\u008d\u0097n\u0012\u0004@\u008bl\u00e7\u00fb\u00a9\u00912@\u00afG\u00e1z\u0014\u00ae\u00fb\u00bfG\u00b6\u00f3\u00fd\u00d4x\u0007@0\u00dd$\u0006\u0081U2@;\u00dfO\u008d\u0097n\u00a2?\u001a\u0004V\u000e-\u00b2\u00e5?\u001c/\u00dd$\u0006\u00a13@\u0090\u00c2\u00f5(\\\u008f\u00ee?\u00c5 \u00b0rh\u0091\u00f1?}?5^\u00ba\u00a93@\u00da\u00ce\u00f7S\u00e3\u00a5\u00bb\u00bfH\u00e1z\u0014\u00aeG\u00c1\u00bf\u0019\u0004V\u000e-24@ffffff\u0001\u00c05^\u00baI\f\u0002\u00ef?fffff\u00863@R\u00b8\u001e\u0085\u00ebQ\u0002\u00c06^\u00baI\f\u0002\u00cb?\u00ecQ\u00b8\u001e\u0085+4@\u0088\u0016\u00d9\u00ce\u00f7S\u0007\u00c0Zd;\u00dfO\u008d\u00f9?:\u00b4\u00c8v\u00be?3@\u00fe\u00d4x\u00e9&1\u00f0\u00bfX9\u00b4\u00c8v\u00be\u00f5?=\n\u00d7\u00a3p=3@\u0018\u00d9\u00ce\u00f7S\u00e3\t@\u00fe\u00d4x\u00e9&\u00b1\u0016@\u008e\u0097n\u0012\u0083\u0000,@\u000e-\u00b2\u009d\u00ef\u00a7\u000b@}?5^\u00ba\u00c9\u0012@G\u00b6\u00f3\u00fd\u00d48,@{\u0014\u00aeG\u00e1\u00fa\u0010@\u00a8\u00c6K7\u0089\u00c1\u001a@\u00be\u009f\u001a/\u00ddd+@\u0006\u0081\u0095C\u008bl\u0010@\u00bf\u009f\u001a/\u00dd$\u001e@X9\u00b4\u00c8v\u00be,@`\u00e5\u00d0\"\u00db\u00f9\u000f@r=\n\u00d7\u00a3p\u001d@r=\n\u00d7\u00a3\u00b0(@)\\\u008f\u00c2\u00f5\u00a8\u0016@\u008f\u00c2\u00f5(\\\u008f\u0018@I\u00e1z\u0014\u00ae\u00c7+@*\\\u008f\u00c2\u00f5(\u0017@fffff\u00e6\u0014@\u00ea&1\b\u00ac\u009c*@\u0006\u0081\u0095C\u008bl\u0010@{\u0014\u00aeG\u00e1:!@\u00d9\u00ce\u00f7S\u00e3e(@P\u008d\u0097n\u0012\u0003\u001b@\u00fc\u00a9\u00f1\u00d2Mb\u001c@\u001f\u0085\u00ebQ\u00b8\u001e+@\u009b\u0099\u0099\u0099\u0099\u0099\u001e@\u00b7\u00f3\u00fd\u00d4x\u00e9\u0019@.\u00b2\u009d\u00ef\u00a7\u0006+@\u00e4\u00a5\u009b\u00c4 \u00b0\u001b@\u009f\u00ef\u00a7\u00c6K7\u001f@#\u00db\u00f9~j\u00bc,@\u00baI\f\u0002+\u0087\u001a@\u0091\u00ed|?5^\u001e@\u00fe\u00d4x\u00e9&1)@\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u0017@\u0083\u00c0\u00ca\u00a1E\u00b6\u0016@V\u000e-\u00b2\u009d\u00af.@2\b\u00ac\u001cZ\u00e4\u0017@#\u00db\u00f9~j<\u001a@\u00d3Mb\u0010X\u00f9/@Nb\u0010X94\u0014@\u0001\u0000\u0000\u0000\u0000\u0080\u0014@\u0086\u00ebQ\u00b8\u001eE/@\b\u00ac\u001cZd\u00bb\u001b@\f\u0002+\u0087\u0016\u00d9\u0014@1\b\u00ac\u001cZ\u00e4.@\u00ac\u001cZd;\u00df\f@)\\\u008f\u00c2\u00f5(\u001a@{\u0014\u00aeG\u00e1\u00ba&@\u008f\u00c2\u00f5(\\\u008f\f@\u00cav\u00be\u009f\u001a/\u0016@\u009c\u00c4 \u00b0r('@T\u00e3\u00a5\u009b\u00c4 \n@\u00c6 \u00b0rh\u0011\u001c@\n\u00d7\u00a3p=\n$@9\u00b4\u00c8v\u00be\u009f\u0010@\u00ee|?5^:\u001e@\u00ac\u001cZd;_#@J\f\u0002+\u0087\u0016\u0000@\u00c9v\u00be\u009f\u001a\u00af\u001f@w\u00be\u009f\u001a/\u00dd#@w\u00be\u009f\u001a/\u00dd\b@b\u0010X9\u00b4H\u0017@u\u0093\u0018\u0004V\u000e\"@\u0017\u00d9\u00ce\u00f7S\u00e3\u0001@B`\u00e5\u00d0\"\u00db\u0014@u\u0093\u0018\u0004V\u008e\"@\u00aeG\u00e1z\u0014\u00ae\u000f@o\u0012\u0083\u00c0\u00ca\u00a1\u0014@\u00ac\u001cZd;_\"@\u0014\u00aeG\u00e1z\u0014\u00fe?P\u008d\u0097n\u0012\u0083!@\u0010X9\u00b4\u00c8\u00f6!@\u00fa~j\u00bct\u0093\b@\u00c6 \u00b0rh\u0091\u0018@\u00c9v\u00be\u009f\u001a/\u001e@\u0096C\u008bl\u00e7\u00fb\u0000@\n\u00d7\u00a3p=\u008a\u001a@\u0002+\u0087\u0016\u00d9N\u001d@\u00c9v\u00be\u009f\u001a/\b@x\u00be\u009f\u001a/\u00dd\u0014@C`\u00e5\u00d0\"\u00db\u001b@\u00e3\u00a5\u009b\u00c4 \u00b0\u0011@\u0007\u0081\u0095C\u008b\u00ec\u001c@\u009a\u0099\u0099\u0099\u0099\u0099\u001b@\u00a6\u009b\u00c4 \u00b0r\u0017@\u0089A`\u00e5\u00d0\u00a2\u0018@S\u00b8\u001e\u0085\u00ebQ\u001c@\u00c3\u00f5(\\\u008f\u00c2\u0016@\u009c\u00c4 \u00b0r\u00e8\u0014@E\u008bl\u00e7\u00fb)\u001a@\u001b/\u00dd$\u0006\u0081\u0018@\n\u00d7\u00a3p=\n\u0018@\u00a8\u00c6K7\u0089A @\f\u0002+\u0087\u0016\u00d9\u001a@{\u0014\u00aeG\u00e1z\u001a@.\u00b2\u009d\u00ef\u00a7F\u001a@\u00e5\u00d0\"\u00db\u00f9~\u00f0?}?5^\u00baI\u001f@\u00db\u00f9~j\u00bc\u00b4%@\u0002+\u0087\u0016\u00d9\u00ce\u00f1?\u00b1rh\u0091\u00ed|\u001c@\u0081\u0095C\u008bl''@z\u00e9&1\b\u00ac\u009c?\f\u0002+\u0087\u0016\u00d9!@J\f\u0002+\u0087\u00d6%@\u000e-\u00b2\u009d\u00ef\u00a7\u00de\u00bf\u00f0\u00a7\u00c6K7\u00c9!@\u00d9\u00ce\u00f7S\u00e3\u00e5#@\u00e1z\u0014\u00aeG\u00e1\u00e2?{\u0014\u00aeG\u00e1\u00ba$@\u0082\u0095C\u008blg&@0\u00dd$\u0006\u0081\u0095\u00ef\u00bf1\b\u00ac\u001cZd!@?5^\u00baI\f(@\u00da\u00ce\u00f7S\u00e3\u00a5\u00db\u00bf:\u00b4\u00c8v\u00be_!@\u0006\u0081\u0095C\u008b\u00ec)@x\u00be\u009f\u001a/\u00dd\u00c4?\u0012\u0083\u00c0\u00ca\u00a1\u0085&@\u0094\u0018\u0004V\u000e\u00ed$@\u0010X9\u00b4\u00c8v\u00fa\u00bfth\u0091\u00ed|?\u001d@D\u008bl\u00e7\u00fb\u00a9'@\u001eZd;\u00dfO\u00ed\u00bf\u0080j\u00bct\u0093\u0018\u001a@\u009c\u00c4 \u00b0rh'@Nb\u0010X9\u00b4\u0001\u00c0\u00c6 \u00b0rh\u0011\u001d@\u0012\u0083\u00c0\u00ca\u00a1\u0085)@\u00cf\u00f7S\u00e3\u00a5\u009b\u0000\u00c0\u00dfO\u008d\u0097n\u0092#@\u00d0\u00f7S\u00e3\u00a5[(@7\u0089A`\u00e5\u00d0\u00fa\u00bf\u00afG\u00e1z\u0014n%@gffff&)@b\u0010X9\u00b4\u00c8\u0003\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\r$@\u0089A`\u00e5\u00d0b&@#\u00db\u00f9~j\u00bc\u0006\u00c0\u00a8\u00c6K7\u0089\u00c1\"@\u000e-\u00b2\u009d\u00ef\u00a7)@sh\u0091\u00ed|?\u0005\u00c0'1\b\u00ac\u001cZ\u001d@\u0081\u0095C\u008blg%@R\u00b8\u001e\u0085\u00ebQ\u000b\u00c0`\u00e5\u00d0\"\u00db9 @d;\u00dfO\u008d\u0097%@\u00c5 \u00b0rh\u0091\u0000\u00c08\u0089A`\u00e5\u00d0\u001d@J\f\u0002+\u0087\u0096#@\u001a\u0004V\u000e-\u00b2\t\u00c0\u0014\u00aeG\u00e1z\u0094\u0019@\u00ecQ\u00b8\u001e\u0085k%@\u00ea&1\b\u00ac\u001c\u00fa?|\u0014\u00aeG\u00e1\u00fa$@\u00c9v\u00be\u009f\u001a\u00ef'@\u00a0\u001a/\u00dd$\u0006\u0000@\u00a8\u00c6K7\u0089A#@\u00aeG\u00e1z\u0014\u00ae(@\u00a4p=\n\u00d7\u00a3\u0001@q=\n\u00d7\u00a3\u00b0'@\u0088\u0016\u00d9\u00ce\u00f7\u0093(@\u00ecQ\u00b8\u001e\u0085\u00eb\u00f5?d;\u00dfO\u008d\u0017)@\u00a2E\u00b6\u00f3\u00fd\u00d4(@\u00cb\u00a1E\u00b6\u00f3\u00fd\u0007@H\u00e1z\u0014\u00ae\u0007)@=\n\u00d7\u00a3p=&@\u008aA`\u00e5\u00d0\"\b@\u0082\u0095C\u008blg'@1\b\u00ac\u001cZ$+@\"\u00b0rh\u0091\u00ed\u000e@@5^\u00baI\f&@\u00f4\u00fd\u00d4x\u00e9&+@#\u00db\u00f9~j\u00bc\u000b@'1\b\u00ac\u001cZ)@\u0099n\u0012\u0083\u00c0\u008a+@=\n\u00d7\u00a3p=\r@H\u00e1z\u0014\u00ae\u0007+@q=\n\u00d7\u00a3\u00b0&@\u00cb\u00a1E\u00b6\u00f3\u00fd\u0001@\u00bct\u0093\u0018\u0004\u0096&@\u00baI\f\u0002+\u0087-@\u00ecQ\u00b8\u001e\u0085\u00eb\u0000@\u00e3\u00a5\u009b\u00c4 \u00f0#@\u0091\u00ed|?5^.@\u00c8K7\u0089A`\u0004@\u00c7K7\u0089A \"@S\u00b8\u001e\u0085\u00eb\u0091-@\u0005V\u000e-\u00b2\u009d\u00f9?\u00b3\u009d\u00ef\u00a7\u00c6\u000b(@\u00bf\u009f\u001a/\u00ddd/@\u00be\u009f\u001a/\u00dd$\u00fa?\u00ab\u00f1\u00d2Mb\u0010*@J\f\u0002+\u0087\u0096/@ffffff\u00f2?\u00b8\u001e\u0085\u00ebQx&@\u00ecQ\u00b8\u001e\u0085\u00ab0@\u0004V\u000e-\u00b2\u009d\u00e7?\u0010X9\u00b4\u00c8\u00f6&@p\u0012\u0083\u00c0\u00ca\u00a11@T\u00e3\u00a5\u009b\u00c4 \u00f6?h\u0091\u00ed|?\u00f5#@\u00c7K7\u0089A`0@\u00d3Mb\u0010X9\b@\u00de$\u0006\u0081\u0095\u0003(@\u0085\u00ebQ\u00b8\u001e\u00c5#@\u00a4p=\n\u00d7\u00a3\u0004@\u0083\u00c0\u00ca\u00a1E6&@\u00e2z\u0014\u00aeG\u00a1#@333333\r@th\u0091\u00ed|\u00ff(@\u0002+\u0087\u0016\u00d9N!@\u0002+\u0087\u0016\u00d9\u00ce\u000f@c\u0010X9\u00b4\b+@\u00a0\u001a/\u00dd$\u00c6!@\u001c/\u00dd$\u0006\u0081\u0005@\u00f4\u00fd\u00d4x\u00e9&)@\u001c/\u00dd$\u0006\u0001\u001e@\u00c3\u00f5(\\\u008fB\u0013@T\u00e3\u00a5\u009b\u00c4 '@\u00d1\"\u00db\u00f9~j @\u0010X9\u00b4\u00c8\u00f6\u0011@\u0096C\u008bl\u00e7;%@\u00be\u009f\u001a/\u00dd$\u001f@\u009f\u00ef\u00a7\u00c6K7\u0005@\u00da\u00ce\u00f7S\u00e3%+@\u00c6 \u00b0rh\u0011\u001b@>\n\u00d7\u00a3p\u00bd\u0016@^\u00baI\f\u0002\u00eb(@\u0002+\u0087\u0016\u00d9N\u001d@=\n\u00d7\u00a3p\u00bd\u0014@v\u0093\u0018\u0004VN*@\u00aa\u00f1\u00d2Mb\u0090\u001a@9\u00b4\u00c8v\u00be\u001f\u0019@z\u00e9&1\b,*@<\u00dfO\u008d\u0097\u00ee\u001f@\u0093\u0018\u0004V\u000e-\u0019@Q\u008d\u0097n\u0012\u00c3'@\u00cc\u00a1E\u00b6\u00f3}\u001a@\u009a\u0099\u0099\u0099\u0099\u0019\u0017@\u00a2E\u00b6\u00f3\u00fdT&@(1\b\u00ac\u001c\u00da\"@\u0091\u00ed|?5\u00de\u0014@\u0014\u00aeG\u00e1zT%@\u00c2\u00ca\u00a1E\u00b6s$@th\u0091\u00ed|?\u0018@0\u00dd$\u0006\u0081\u0015(@\u0086\u00ebQ\u00b8\u001e\u0005$@\u00aa\u00f1\u00d2Mb\u0090\u001a@\u0006\u0081\u0095C\u008b,%@\u00c9v\u00be\u009f\u001a/\"@Nb\u0010X9\u00b4\u00fc?9\u00b4\u00c8v\u00be\u001f'@o\u0012\u0083\u00c0\u00ca!\u001d@\u00ea&1\b\u00ac\u001c\u00fe?\u00d8\u00a3p=\n\u0097%@\u00b9\u001e\u0085\u00ebQ\u00b8\u001f@\u00d6x\u00e9&1\b\u00ec?)\\\u008f\u00c2\u00f5\u00e8&@:\u00b4\u00c8v\u00be\u009f\u0018@\u0092\u00ed|?5^\u00f6?\u0088\u0016\u00d9\u00ce\u00f7\u0093'@\u00baI\f\u0002+\u0007\u0015@d;\u00dfO\u008d\u0097\u00d6\u00bf\u00cav\u00be\u009f\u001a\u00af(@\u00d8\u00a3p=\nW\u0019@V\u000e-\u00b2\u009d\u00ef\u00e3?o\u0012\u0083\u00c0\u00ca\u00e1#@2\b\u00ac\u001cZ\u00e4\u0017@\u001c/\u00dd$\u0006\u0081\u0095\u00bf\u00ee|?5^\u00fa\"@<\u00dfO\u008d\u0097\u00ee\u001a@Y9\u00b4\u00c8v\u00be\u00f9?sh\u0091\u00ed|\u00ff\"@\u00aa\u00f1\u00d2Mb\u0010\u0018@\\\u008f\u00c2\u00f5(\\\u00ef\u00bf\u0012\u0083\u00c0\u00ca\u00a1\u0085)@\u00e1z\u0014\u00aeGa\u0015@L7\u0089A`\u00e5\u00b0\u00bf\u0085\u00ebQ\u00b8\u001eE#@\u00d9\u00ce\u00f7S\u00e3\u00a5\u0012@\u00f8S\u00e3\u00a5\u009b\u00c4\u00f6\u00bf\\\u008f\u00c2\u00f5(\u00dc\"@\u00a6\u009b\u00c4 \u00b0r\u0012@Zd;\u00dfO\u008d\u0000\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\r#@\u00c7K7\u0089A\u00e0\u0015@\u0092\u00ed|?5^\u00e6?\u00c5 \u00b0rh\u00d1\"@\u00afG\u00e1z\u0014\u00ae\f@,\u0087\u0016\u00d9\u00ce\u00f7\u00fb?J\f\u0002+\u0087V#@U\u00e3\u00a5\u009b\u00c4 \r@-\u00b2\u009d\u00ef\u00a7\u00c6\u00ff\u00bf}?5^\u00ba\t\"@\u00cc\u00a1E\u00b6\u00f3\u00fd\n@\u00fc\u00a9\u00f1\u00d2Mb\b\u00c0sh\u0091\u00ed|\u00bf!@\u00a9\u00c6K7\u0089A\n@b\u0010X9\u00b4\u00c8\u00c6?\u0087\u0016\u00d9\u00ce\u00f7\u00d3!@m\u00e7\u00fb\u00a9\u00f1\u00d2\u0002@,\u0087\u0016\u00d9\u00ce\u00f7\u00eb?d;\u00dfO\u008d\u0097!@\u008f\u00c2\u00f5(\\\u008f\u00f8?\u008d\u0097n\u0012\u0083\u00c0\u00f2\u00bf\u00cd\u00cc\u00cc\u00cc\u00cc\u008c!@\u00d5x\u00e9&1\b\u0002@\u009f\u00ef\u00a7\u00c6K7\u00fb\u00bf\u00dfO\u008d\u0097n\u0012!@o\u0012\u0083\u00c0\u00ca\u00a1\u00f5?\u0015\u00aeG\u00e1z\u0014\u00ea\u00bf\u0080j\u00bct\u0093\u0018)@'1\b\u00ac\u001cZ\u001e@\u0093\u0018\u0004V\u000e-\u00d2\u00bf\u009e\u00ef\u00a7\u00c6Kw(@P\u008d\u0097n\u0012\u00c3 @\u00b6\u00f3\u00fd\u00d4x\u00e9\u0000\u00c0X9\u00b4\u00c8v>*@\u00a4p=\n\u00d7\u00a3\u001f@Nb\u0010X9\u00b4\u0006\u00c0\u00d8\u00a3p=\n\u0017)@\u0018\u00d9\u00ce\u00f7Sc\u001d@/\u00dd$\u0006\u0081\u0095\u0001\u00c0Ob\u0010X94-@[d;\u00dfO\r\u001e@\u00d2\"\u00db\u00f9~j\u0003\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb)@\u00baI\f\u0002+\u00c7\"@\u00a2E\u00b6\u00f3\u00fd\u00d4\u0001\u00c0\u00a8\u00c6K7\u0089\u00c1'@\u0093\u0018\u0004V\u000em#@/\u00dd$\u0006\u0081\u0095\u00fb\u00bf\u00f5\u00fd\u00d4x\u00e9\u00e6*@\u0012\u0083\u00c0\u00ca\u00a1\u0005$@b\u0010X9\u00b4\u00c8\n\u00c0\u008d\u0097n\u0012\u0083\u0000.@\u0013\u0083\u00c0\u00ca\u00a1\u00c5\u001c@^\u00baI\f\u0002+\u000e\u00c0\u00cf\u00f7S\u00e3\u00a5\u009b*@\u00e7\u00fb\u00a9\u00f1\u00d2M#@D\u008bl\u00e7\u00fb\u00a9\u000e\u00c0\u00c4\u00f5(\\\u008f\u0082,@\u00c1\u00ca\u00a1E\u00b6s#@\u00fa~j\u00bct\u0093\u00f2\u00bf\u00bdt\u0093\u0018\u0004\u00d6.@&\u0006\u0081\u0095C\u008b\u001e@\u000e-\u00b2\u009d\u00ef\u00a7\u00d6\u00bf\u0089A`\u00e5\u00d0\u00e2-@5^\u00baI\f\u0002 @\\\u008f\u00c2\u00f5(\\\u00f3\u00bf#\u00db\u00f9~j\u00dc0@\u001eZd;\u00df\u00cf\u001d@\u00a0\u001a/\u00dd$\u0006\u0002\u00c05^\u00baI\f\"1@#\u00db\u00f9~j<\u001e@\u008d\u0097n\u0012\u0083\u00c0\u00e6\u00bf\u00be\u009f\u001a/\u00dd$1@\u00a4p=\n\u00d7#\u0018@\u0098n\u0012\u0083\u00c0\u00ca\u00d1\u00bf\u00b2\u009d\u00ef\u00a7\u00c6\u008b1@Nb\u0010X9\u00f4 @:\u00b4\u00c8v\u00be\u009f\u00d2\u00bf\\\u008f\u00c2\u00f5(\u009c2@\u00ee|?5^z @\u00aa\u00f1\u00d2Mb\u0010\u00e8?sh\u0091\u00ed|?1@\u00d7\u00a3p=\n\u0097 @\u0014\u00aeG\u00e1z\u0014\u00ce?fffff\u00860@\u0014\u00aeG\u00e1z\u0014\u0016@\u00bct\u0093\u0018\u0004V\u00de\u00bf\u009c\u00c4 \u00b0rh1@\b\u00ac\u001cZd\u00fb#@F\u00b6\u00f3\u00fd\u00d4x\u00f5\u00bf=\n\u00d7\u00a3p\u009d0@^\u00baI\f\u0002\u00eb$@\u00a0\u001a/\u00dd$\u0006\u00d1?\u00b0rh\u0091\u00ed\u001c2@F\u00b6\u00f3\u00fd\u00d4x%@\u00fa~j\u00bct\u0093\u00f6\u00bf\u0087\u0016\u00d9\u00ce\u00f7\u00132@\u00a4p=\n\u00d7\u00a3\u0015@^\u00baI\f\u0002+\u0001\u00c0fffff\u00862@\u00dd$\u0006\u0081\u0095\u00c3\u0017@\u00db\u00f9~j\u00bct\u00ef\u00bf\u00b8\u001e\u0085\u00ebQ\u00b82@33333\u00b3\u0010@\u00f2\u00d2Mb\u0010X\u00b9?\u00cf\u00f7S\u00e3\u00a5\u00bb2@433333\u0010@P\u008d\u0097n\u0012\u0083\u00f4\u00bfj\u00bct\u0093\u0018\u00c43@\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u0010@5^\u00baI\f\u0002\u00f9\u00bfh\u0091\u00ed|?\u00152@\u00f2\u00d2Mb\u0010X\u0007@h\u0091\u00ed|?5\u0003\u00c0\u00d5x\u00e9&1(1@\u0014\u00aeG\u00e1z\u0014\b@\"\u00b0rh\u0091\u00ed\u00f2\u00bf\u00d5x\u00e9&1\u00a82@\u00c2\u00ca\u00a1E\u00b6\u00f3\u00fb?\u0018\u00d9\u00ce\u00f7S\u00e3\u00dd\u00bf`\u00e5\u00d0\"\u00dbY3@\u0080j\u00bct\u0093\u0018\u00fe?\u0019\u0004V\u000e-\u00b2\u00fd\u00bf\u009e\u00ef\u00a7\u00c6Kw2@\u008e\u0097n\u0012\u0083\u00c0\u00da?\u00b4\u00c8v\u00be\u009f\u001a\u0007\u00c0\u001a\u0004V\u000e-\u00d22@D\u008bl\u00e7\u00fb\u00a9\u00d9?J\f\u0002+\u0087\u0016\u00fb\u00bfD\u008bl\u00e7\u00fb\u00e90@\u001c/\u00dd$\u0006\u0081\u00a5?\u00aeG\u00e1z\u0014\u00ae\u00f3\u00bfj\u00bct\u0093\u0018d3@\u009f\u00ef\u00a7\u00c6K7\u00e5\u00bf\u00aeG\u00e1z\u0014\u00ae\u00c7\u00bf\u00a6\u009b\u00c4 \u00b0\u00123@@5^\u00baI\f\u00e6\u00bf\u000e-\u00b2\u009d\u00ef\u00a7\u00e2\u00bf\u009a\u0099\u0099\u0099\u0099Y0@\u0092\u00ed|?5^\u00ca?$\u00db\u00f9~j\u00bc\u00fe\u00bf\u0019\u0004V\u000e-23@Nb\u0010X9\u00b4\u0000\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2M\u00f8\u00bf\u0019\u0004V\u000e-R2@\u00e3\u00a5\u009b\u00c4 \u00b0\u0004\u00c0q=\n\u00d7\u00a3p\u00fb\u00bf\u0011X9\u00b4\u00c8\u00164@(1\b\u00ac\u001cZ\u0005\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\u0007\u00c0\u00c5 \u00b0rh\u00113@\u00e3\u00a5\u009b\u00c4 \u00b0\u00fe\u00bf\u0098n\u0012\u0083\u00c0\u00ca\u00f5\u00bf\u00cav\u00be\u009f\u001a\u00ef4@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u00cc\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u00f0\u00bf=\n\u00d7\u00a3p\u001d5@\u00f2\u00d2Mb\u0010X\u00e9?ffffff\u00e6\u00bf\u00d8\u00a3p=\n\u00975@\u00f7(\\\u008f\u00c2\u00f5\u00e8\u00bf.\u00b2\u009d\u00ef\u00a7\u00c6\u0002\u00c0\\\u008f\u00c2\u00f5(\\5@\u00f9S\u00e3\u00a5\u009b\u00c4\u00d8\u00bf\u000b\u00d7\u00a3p=\n\u0006\u00c0\u0019\u0004V\u000e-20@\u00edQ\u00b8\u001e\u0085\u00eb\u00d9\u00bf\u009a\u0099\u0099\u0099\u0099\u0099\f\u00c0\u00b4\u00c8v\u00be\u009f\u00ba0@\u009c\u00c4 \u00b0rh\u00e5\u00bf\u0098n\u0012\u0083\u00c0\u00ca\u0005\u00c0\u001f\u0085\u00ebQ\u00b8\u009e-@\u00e2z\u0014\u00aeG\u00e1\u00ee\u00bf\u00e8\u00fb\u00a9\u00f1\u00d2M\u00fe\u00bf$\u00db\u00f9~j|,@\u00c3\u00f5(\\\u008f\u00c2\u00e1\u00bf#\u00db\u00f9~j\u00bc\u0005\u00c0v\u0093\u0018\u0004V\u008e-@{\u0014\u00aeG\u00e1z\u0003\u00c0\u00ad\u001cZd;\u00df\u000f\u00c0V\u000e-\u00b2\u009d\u00ef+@5^\u00baI\f\u0002\u00e3\u00bf\u00b2\u009d\u00ef\u00a7\u00c6K\u0013\u00c0\u009f\u00ef\u00a7\u00c6K\u00b7,@\u00e3\u00a5\u009b\u00c4 \u00b0\u00f2\u00bf\u009a\u0099\u0099\u0099\u0099\u0099\f\u00c0j\u00bct\u0093\u0018\u00c4.@\u0099n\u0012\u0083\u00c0\u00ca\b\u00c0\u00bct\u0093\u0018\u0004V\u000f\u00c0\u0089A`\u00e5\u00d0\u00e2(@@5^\u00baI\f\u00ea\u00bf\u0098n\u0012\u0083\u00c0J\u0013\u00c0\u0096C\u008bl\u00e7\u00fb'@\u00da\u00ce\u00f7S\u00e3\u00a5\u00db\u00bf\u000f-\u00b2\u009d\u00ef\u00a7\b\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u0013(@\u0000\u0000\u0000\u0000\u0000\u0000\u00d0\u00bf\u00b8\u001e\u0085\u00ebQ\u00b8\r\u00c0\u00baI\f\u0002+\u0087(@\u00ac\u001cZd;\u00df\u00fd\u00bf\u0018\u00d9\u00ce\u00f7Sc\u0011\u00c0:\u00b4\u00c8v\u00be_,@/\u00dd$\u0006\u0081\u0095\u00e7?\u00db\u00f9~j\u00bct\u0013\u00c0>\n\u00d7\u00a3p\u00fd-@\u00dd$\u0006\u0081\u0095C\u00e7?\b\u00ac\u001cZd;\u00fd\u00bf\u00e2z\u0014\u00aeG\u00e1+@\"\u00b0rh\u0091\u00ed\u0007\u00c0:\u00b4\u00c8v\u00be\u009f\u00f2\u00bfS\u00b8\u001e\u0085\u00eb\u0011+@#\u00db\u00f9~j\u00bc\u0002\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u00fe\u00bf\u00f0\u00a7\u00c6K7\t+@q=\n\u00d7\u00a3p\u0011\u00c0T\u00e3\u00a5\u009b\u00c4 \u0007\u00c0\u00de$\u0006\u0081\u0095\u0083+@o\u0012\u0083\u00c0\u00ca!\u0013\u00c0\u009e\u00ef\u00a7\u00c6K7\u00fd\u00bfX9\u00b4\u00c8v\u00fe'@\u00cd\u00cc\u00cc\u00cc\u00ccL\u0011\u00c0j\u00bct\u0093\u0018\u0004\u00ea\u00bf\u0096C\u008bl\u00e7{,@\u00dc\u00f9~j\u00bc\u00f4\u0014\u00c02\b\u00ac\u001cZd\u00ef\u00bfV\u000e-\u00b2\u009d\u00ef+@\u009a\u0099\u0099\u0099\u0099\u0019\u0019\u00c0<\u00dfO\u008d\u0097n\u00ee\u00bf\u007fj\u00bct\u0093\u0098.@\n\u00d7\u00a3p=\n\u0014\u00c0\u0004V\u000e-\u00b2\u009d\u00f7\u00bf\u00e4\u00a5\u009b\u00c4 \u00b0&@Y9\u00b4\u00c8v\u00be\n\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u00e2?9\u00b4\u00c8v\u00be\u00df+@\u00f8S\u00e3\u00a5\u009bD\u0013\u00c0\f\u0002+\u0087\u0016\u00d9\u00f4?\r\u0002+\u0087\u0016Y*@w\u00be\u009f\u001a/]\u0016\u00c0\u00e5\u00d0\"\u00db\u00f9~\u00ee?\u00afG\u00e1z\u0014.*@\u001f\u0085\u00ebQ\u00b8\u001e\u001a\u00c0333333\u0002@\u00a2E\u00b6\u00f3\u00fd\u0014*@.\u00b2\u009d\u00ef\u00a7F\u0015\u00c0\u00a4p=\n\u00d7\u00a3\u00f0?\u00fd\u00a9\u00f1\u00d2M\u00a2,@\u00c2\u00ca\u00a1E\u00b6\u00f3\r\u00c0\u00fa~j\u00bct\u0093\u0001\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb&@\u00e5\u00d0\"\u00db\u00f9\u00fe\u0015\u00c0\u0091\u00ed|?5^\u0003\u00c0)\\\u008f\u00c2\u00f5\u00e8'@h\u0091\u00ed|?5\u0019\u00c0+\u0087\u0016\u00d9\u00ce\u00f7\u0000\u00c0d;\u00dfO\u008d\u00d7#@\u008d\u0097n\u0012\u0083\u00c0\u0016\u00c0\u0092\u00ed|?5^\u0006\u00c0?5^\u00baI\f#@\u0094\u0018\u0004V\u000e\u00ad\u0013\u00c0M7\u0089A`\u00e5\u00e4\u00bf\b\u00ac\u001cZd\u00bb\"@Zd;\u00dfO\r\u0016\u00c0\u00d1\"\u00db\u00f9~j\u0006\u00c0\u00f6(\\\u008f\u00c2\u00f5\"@<\u00dfO\u008d\u0097\u00ee\u001b\u00c0\b\u00ac\u001cZd;\u0003\u00c0\u0000\u0000\u0000\u0000\u0000@$@\u0080j\u00bct\u0093\u0018\u001f\u00c0P\u008d\u0097n\u0012\u0083\u0003\u00c0\u0093\u0018\u0004V\u000e\u00ed @j\u00bct\u0093\u0018\u0084\u001c\u00c0\u00cf\u00f7S\u00e3\u00a5\u009b\u00d4\u00bfZd;\u00dfO\u008d @-\u00b2\u009d\u00ef\u00a7\u00c6\u0013\u00c0\u00c9v\u00be\u009f\u001a/\u0011\u00c0\u00b4\u00c8v\u00be\u009f\u00da\"@\u00b4\u00c8v\u00be\u009f\u001a\u001c\u00c0\u00e4\u00a5\u009b\u00c4 0\u0014\u00c0\u00fe\u00d4x\u00e9&\u00f1#@\u00f0\u00a7\u00c6K7\t \u00c0\u001c/\u00dd$\u0006\u0001\u0013\u00c0W\u000e-\u00b2\u009d/%@\u00c1\u00ca\u00a1E\u00b6\u00b3!\u00c0:\u00b4\u00c8v\u00be\u001f\u0015\u00c0R\u00b8\u001e\u0085\u00ebQ!@\u008cl\u00e7\u00fb\u00a9\u00f1\u0018\u00c0E\u008bl\u00e7\u00fb)\u001a\u00c0/\u00dd$\u0006\u0081\u00d5!@\u0089A`\u00e5\u00d0\"\u001b\u00c0\u00a4p=\n\u00d7\u00a3\u0014\u00c0\u00c4\u00f5(\\\u008f\u00c2\u001e@/\u00dd$\u0006\u0081\u0015\u0015\u00c0\u00de$\u0006\u0081\u0095\u00c3\u0010\u00c0\u00ee|?5^\u00ba\u001d@\u00fa~j\u00bct\u0093\u0013\u00c0Zd;\u00dfO\u008d\u0019\u00c0\u008bl\u00e7\u00fb\u00a9\u00b1#@:\u00b4\u00c8v\u00be\u001f\u001f\u00c0$\u00db\u00f9~j<\u001c\u00c0\u0081\u0095C\u008bl'$@sh\u0091\u00ed|\u00ff \u00c0\u009c\u00c4 \u00b0r\u00e8\u001d\u00c0\u00c9v\u00be\u009f\u001a/\u001d@\n\u00d7\u00a3p=\u008a\u0014\u00c0\u0014\u00aeG\u00e1z\u0094 \u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\u001b@5^\u00baI\f\u0002\u0012\u00c0\u00aa\u00f1\u00d2Mb\u0090\u001e\u00c0\u00aa\u00f1\u00d2Mb\u0090 @^\u00baI\f\u0002\u00ab\u0018\u00c0R\u00b8\u001e\u0085\u00eb\u0011!\u00c0\u00ac\u001cZd;_!@L7\u0089A`e\u001a\u00c0L7\u0089A`\u00e5\u0018\u00c0L7\u0089A`\u00e5\u001b@\u00a6\u009b\u00c4 \u00b0\u00f2\u0012\u00c0~?5^\u00baI\u0018\u00c0\u00da\u00ce\u00f7S\u00e3%\u0019@\u00d2\"\u00db\u00f9~j\u000f\u00c0\u00a8\u00c6K7\u0089A\u00d0?\u0086\u00ebQ\u00b8\u001eE$@\u009e\u00ef\u00a7\u00c6K7\u0018\u00c0;\u00dfO\u008d\u0097n\u0092\u00bf\u00baI\f\u0002+\u0007&@\u001eZd;\u00df\u00cf\u0019\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M\u00fa?\u0096C\u008bl\u00e7\u00bb#@V\u000e-\u00b2\u009do\u0017\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u0001@j\u00bct\u0093\u0018D%@\u00b0rh\u0091\u00ed|\u0019\u00c0\u001c/\u00dd$\u0006\u0081\u00ff?\u00ea&1\b\u00ac\u00dc!@\u00fe\u00d4x\u00e9&1\u0019\u00c0\u00baI\f\u0002+\u0087\u0001@D\u008bl\u00e7\u00fb\u00a9#@\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0011\u00c0\u00d3Mb\u0010X9\b@\u00de$\u0006\u0081\u0095\u0003\"@Zd;\u00dfO\u008d\u0010\u00c0\n\u00d7\u00a3p=\n\u00f9?}?5^\u00ba\t%@n\u00e7\u00fb\u00a9\u00f1\u00d2\u000b\u00c0\u001b/\u00dd$\u0006\u0081\u00e9?\u00be\u009f\u001a/\u00dd$&@\u00c4\u00f5(\\\u008f\u00c2\u000e\u00c0#\u00db\u00f9~j\u00bc\u00fc?H\u00e1z\u0014\u00ae\u0007%@\n\u00d7\u00a3p=\n\u0000\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\u0006@433333%@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u00fc\u00bf\u001f\u0085\u00ebQ\u00b8\u001e\u00f5?\u00cd\u00cc\u00cc\u00cc\u00ccL\"@\u00dc\u00f9~j\u00bct\u00f7\u00bf\u0012\u0083\u00c0\u00ca\u00a1E\u00f2?i\u0091\u00ed|?u'@Nb\u0010X9\u00b4\u00f4\u00bf\t\u00ac\u001cZd;\u00af?^\u00baI\f\u0002k'@\u00b6\u00f3\u00fd\u00d4x\u00e9\u00f2\u00bf\\\u008f\u00c2\u00f5(\\\u00f5?q=\n\u00d7\u00a30)@\u00a2E\u00b6\u00f3\u00fd\u00d4\u00fe\u00bf\u00b4\u00c8v\u00be\u009f\u001a\u0000@\u0090\u00c2\u00f5(\\\u00cf @\u001b/\u00dd$\u0006\u0081\u00e9\u00bf\u00aa\u00f1\u00d2Mb\u0010\u00fc?\u00d5x\u00e9&1\b(@\u0083\u00c0\u00ca\u00a1E\u00b6\u00b3?\u0012\u0083\u00c0\u00ca\u00a1E\u00fc?433333&@\u00f4\u00fd\u00d4x\u00e9&\u00e5?\u000b\u00d7\u00a3p=\n\u0006@\u0089A`\u00e5\u00d0\u00e2(@Zd;\u00dfO\u008d\u0097\u00bf\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u00ec?433333*@\u00bct\u0093\u0018\u0004V\u00e6?\u00aa\u00f1\u00d2Mb\u0010\u00e4?n\u00e7\u00fb\u00a9\u00f1\u00d2+@\u00db\u00f9~j\u00bct\u00a3?\u00fc\u00a9\u00f1\u00d2Mb\u00a0\u00bf~?5^\u00baI)@ffffff\u00f0?ffffff\u00f8?Zd;\u00dfO\r+@\u001dZd;\u00dfO\u00ff?1\b\u00ac\u001cZd\u0003@^\u00baI\f\u0002+*@\u00b6\u00f3\u00fd\u00d4x\u00e9\u0000@\u00db\u00f9~j\u00bct\u00b3?~?5^\u00baI.@\u00e0O\u008d\u0097n\u0012\u0005@$\u00db\u00f9~j\u00bc\u00d4\u00bf \u0085\u00ebQ\u00b8^.@H\u00e1z\u0014\u00aeG\u00fb?\u00f9S\u00e3\u00a5\u009b\u00c4\u00d8\u00bf\u0004V\u000e-\u00b2]/@7\u0089A`\u00e5\u00d0\n@Zd;\u00dfO\u008d\u00f9?\u008d\u0097n\u0012\u0083\u0000-@n\u00e7\u00fb\u00a9\u00f1\u00d2\u000f@\u001f\u0085\u00ebQ\u00b8\u001e\u00f3?\u00f2\u00d2Mb\u0010\u0018.@\u00b6\u00f3\u00fd\u00d4x\u00e9\u0012@\u00a6\u009b\u00c4 \u00b0r\u0001@\u00a9\u00c6K7\u0089\u0081+@\u00a8\u00c6K7\u0089A\u0011@d;\u00dfO\u008d\u0097\u00f0?h\u0091\u00ed|?\u00b5,@\u00cc\u00a1E\u00b6\u00f3\u00fd\u0006@\u00fa~j\u00bct\u0093\u00b8?\u0096C\u008bl\u00e7{!@r=\n\u00d7\u00a3p\u00fd\u00bfP\u008d\u0097n\u0012\u0083\u00d8\u00bfNb\u0010X9t\"@\u00ef|?5^\u00ba\u0004\u00c0\u00d3Mb\u0010X9\u00dc\u00bf\u00cav\u00be\u009f\u001a\u00af\u001d@\u00b5\u00c8v\u00be\u009f\u001a\u00f9\u00bf(1\b\u00ac\u001cZ\u00dc\u00bf\u001f\u0085\u00ebQ\u00b8\u009e\u001d@c\u0010X9\u00b4\u00c8\u00de\u00bfY9\u00b4\u00c8v\u00be\u00df?\r\u0002+\u0087\u0016Y\u0019@\u007fj\u00bct\u0093\u0018\u0001\u00c0\u00baI\f\u0002+\u0087\u00fe\u00bf\u00bct\u0093\u0018\u0004\u00d6\u001c@\u0092\u00ed|?5^\u0000\u00c0\u0096C\u008bl\u00e7\u00fb\u00ff\u00bf\u00b3\u009d\u00ef\u00a7\u00c6K\u001e@\u00f0\u00a7\u00c6K7\u0089\b\u00c0\u00e1z\u0014\u00aeG\u00e1\u00e6?\u00b2\u009d\u00ef\u00a7\u00c6K\u0015@\u00f5\u00fd\u00d4x\u00e9&\u00f7\u00bf\u00baI\f\u0002+\u0087\u0005\u00c09\u00b4\u00c8v\u00be_ @5^\u00baI\f\u0002\u00f3\u00bf?5^\u00baI\f\u0001\u00c0\u0096C\u008bl\u00e7;\"@\u001f\u0085\u00ebQ\u00b8\u001e\u00f1\u00bf333333\u0007\u00c0\u0092\u00ed|?5\u00de\u001e@\u001eZd;\u00dfO\u00cd\u00bf{\u0014\u00aeG\u00e1z\u0003\u00c0V\u000e-\u00b2\u009d\u00ef\u0016@+\u0087\u0016\u00d9\u00ce\u00f7\u00ff\u00bf\u00d6x\u00e9&1\b\u0000\u00c0Nb\u0010X94\u0015@\u00be\u009f\u001a/\u00dd$\u0007\u00c0\u00e9&1\b\u00ac\u001c\f\u00c0Y9\u00b4\u00c8v>\u0017@\u00bct\u0093\u0018\u0004V\u0001\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u0001\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M\u0015@\u00a8\u00c6K7\u0089A\u00f0\u00bf\u00e5\u00d0\"\u00db\u00f9~\u0010\u00c0y\u00e9&1\b\u00ec @T\u00e3\u00a5\u009b\u00c4 \u00fc\u00bf\b\u00ac\u001cZd;\u0012\u00c0\u00f0\u00a7\u00c6K7\u0089\"@#\u00db\u00f9~j\u00bc\u00f2\u00bfV\u000e-\u00b2\u009do\u0010\u00c0m\u00e7\u00fb\u00a9\u00f1\u0092!@1\b\u00ac\u001cZd\u0006\u00c0;\u00dfO\u008d\u0097\u00ee\u0012\u00c0-\u00b2\u009d\u00ef\u00a7F\u001e@\u00e7\u00fb\u00a9\u00f1\u00d2M\u00fa\u00bf\u00de$\u0006\u0081\u0095C\u00ef?\u00e2z\u0014\u00aeG\u00e1\u0019@C`\u00e5\u00d0\"\u00db\n\u00c0\u00cf\u00f7S\u00e3\u00a5\u009b\u00e4?B`\u00e5\u00d0\"\u00db\u001c@\u0090\u00c2\u00f5(\\\u008f\u000f\u00c0ffffff\u00fc?P\u008d\u0097n\u0012\u0083\u0015@5^\u00baI\f\u0002\u0010\u00c05^\u00baI\f\u0002\u00f5?)\\\u008f\u00c2\u00f5\u00a8\u0011@\u00f2\u00d2Mb\u0010X\u000e\u00c0\u00c9v\u00be\u009f\u001a/\t@\u0093\u0018\u0004V\u000e-\u0015@\u0093\u0018\u0004V\u000e-\n\u00c0c\u0010X9\u00b4\u00c8\u00fe?\u00fb~j\u00bct\u0013\u0017@\u00aa\u00f1\u00d2Mb\u0010\u0016\u00c0\u00ac\u001cZd;\u00df\u0000@B`\u00e5\u00d0\"[\u001b@\u00bct\u0093\u0018\u0004V\u0016\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2M\r@L7\u0089A`\u00e5\u0010@h\u0091\u00ed|?5\u0007\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2\u0007@\u00a2E\u00b6\u00f3\u00fd\u00d4\u0013@\u00f6(\\\u008f\u00c2u\u0018\u00c0\u00db\u00f9~j\u00bct\u0006@\t\u00ac\u001cZd;\u000f@\u00e9&1\b\u00ac\u009c\u0017\u00c0\u0011X9\u00b4\u00c8v\b@\u000e-\u00b2\u009d\u00ef'\u0014@\u00f8S\u00e3\u00a5\u009b\u00c4\u001c\u00c0Y9\u00b4\u00c8v\u00be\u000f@\u001eZd;\u00df\u00cf\u0014@\u00b6\u00f3\u00fd\u00d4x\u00e9\u0016\u00c0R\u00b8\u001e\u0085\u00ebQ\u00e0?V\u000e-\u00b2\u009do\u0015@\u001b/\u00dd$\u0006\u0081\u0018\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\u00e0?d;\u00dfO\u008d\u0017\u0011@\u00e1z\u0014\u00aeG\u00e1\u0018\u00c0\u00a8\u00c6K7\u0089A\u00d0\u00bf333333\u0017@!\u00b0rh\u0091\u00ed\u0015\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u00d0?\u00c3\u00f5(\\\u008fB\u0017@\u001eZd;\u00dfO\u001c\u00c0\u0018\u00d9\u00ce\u00f7S\u00e3\r@\u001eZd;\u00df\u00cf\u0019@/\u00dd$\u0006\u0081\u0095\u0006\u00c0&\u0006\u0081\u0095C\u008b\n@\u00b9\u001e\u0085\u00ebQ8\u001d@<\u00dfO\u008d\u0097n\t\u00c0\u00a4p=\n\u00d7#\u0013@\r\u0002+\u0087\u0016Y\u001a@\u0012\u0083\u00c0\u00ca\u00a1E\u00fc\u00bf\u00a4p=\n\u00d7\u00a3\u0016@|\u0014\u00aeG\u00e1z\u0018@-\u00b2\u009d\u00ef\u00a7\u00c6\u0001\u00c0\u00aa\u00f1\u00d2Mb\u0010\u0012@\u00baI\f\u0002+\u0087\u0017@\u00c9v\u00be\u009f\u001a/\u00dd\u00bf\u0018\u00d9\u00ce\u00f7S\u00e3\u0014@\u00a6\u009b\u00c4 \u00b02 @\u00b5\u00c8v\u00be\u009f\u001a\u00f9\u00bfw\u00be\u009f\u001a/]\u0011@\u00d0\u00f7S\u00e3\u00a5[!@\u0090\u00c2\u00f5(\\\u008f\u00f4\u00bf=\n\u00d7\u00a3p\u00bd\u0014@L7\u0089A`\u00e5\u0013@h\u0091\u00ed|?5\u00be\u00bf\u00bf\u009f\u001a/\u00dd$\u0019@\u00f4\u00fd\u00d4x\u00e9\u00a6 @\u00a4p=\n\u00d7\u00a3\u00e0\u00bf\u00bf\u009f\u001a/\u00dd\u00a4\u001b@\u00d4Mb\u0010X\u00b9\u001d@\u009c\u00c4 \u00b0rh\u00e1\u00bf\u00a0\u001a/\u00dd$\u0086\u001b@\u000e-\u00b2\u009d\u00efg\"@D\u008bl\u00e7\u00fb\u00a9\u00e9\u00bf@5^\u00baI\u008c\u0017@\u00c5 \u00b0rh\u00d1 @\u00b2\u009d\u00ef\u00a7\u00c6K\u00df?\u0002+\u0087\u0016\u00d9\u00ce\u0016@\u00b6\u00f3\u00fd\u00d4xi!@R\u00b8\u001e\u0085\u00ebQ\u0006\u00c0j\u00bct\u0093\u0018\u0084\u0013@43333s!@\u00e7\u00fb\u00a9\u00f1\u00d2M\n\u00c0\u007fj\u00bct\u0093\u0018\u000b@\u001b/\u00dd$\u0006\u0081\u0018@\u00e9&1\b\u00ac\u001c\u00d2?\u00c7K7\u0089A`\u0006@\u00f4\u00fd\u00d4x\u00e9\u00a6\u001b@Zd;\u00dfO\u008d\u00a7?\u008cl\u00e7\u00fb\u00a9\u00f1\u0007@\u0010X9\u00b4\u00c8\u00f6\u0014@L7\u0089A`\u00e5\u00f6?S\u00b8\u001e\u0085\u00ebQ\r@\u0014\u00aeG\u00e1z\u0094\u0015@h\u0091\u00ed|?5\u0002@\u00e1z\u0014\u00aeG\u00e1\b@\n\u00d7\u00a3p=\n\u000e@\u00bct\u0093\u0018\u0004V\u00f2?\u001b/\u00dd$\u0006\u0081\u00f9?\u00aa\u00f1\u00d2Mb\u0090\u0016@q=\n\u00d7\u00a3p\u00ff?\u00a3E\u00b6\u00f3\u00fd\u00d4\u00fc?k\u00bct\u0093\u0018\u0084\u001a@\"\u00b0rh\u0091\u00ed\u0002@z\u00e9&1\b\u00ac\u00ec?\u00e3\u00a5\u009b\u00c4 0\u0017@\u00e9&1\b\u00ac\u001c\u00f2?U\u00e3\u00a5\u009b\u00c4 \r@\u00b8\u001e\u0085\u00ebQ\u00b8\u0007@\n\u00d7\u00a3p=\n\u00ff?\u00db\u00f9~j\u00bct\u00ef?\u00ecQ\u00b8\u001e\u0085\u00eb\u0012@0\u00dd$\u0006\u0081\u0095\b@\u00ee|?5^\u00ba\u00ed?~?5^\u00baI\r@\u00c2\u00ca\u00a1E\u00b6\u00f3\u0006@\u00b4\u00c8v\u00be\u009f\u001a\u00fd?\u00f6(\\\u008f\u00c2u\u0013@\u0098n\u0012\u0083\u00c0J\u0011@\u001f\u0085\u00ebQ\u00b8\u001e\u0006@\u0012\u0083\u00c0\u00ca\u00a1E\u0011@\u00d3Mb\u0010X9\u0011@\u00d9\u00ce\u00f7S\u00e3\u00a5\u00f5?h\u0091\u00ed|?\u00b5\u0011@\u00a2E\u00b6\u00f3\u00fd\u00d4\u0014@\u001dZd;\u00dfO\u0000@\u0089A`\u00e5\u00d0\u00a2\u0017@\u00cd\u00cc\u00cc\u00cc\u00ccL\u0012@\u00f2\u00d2Mb\u0010X\u00d9\u00bfT\u00e3\u00a5\u009b\u00c4 \u0015@\u0015\u00aeG\u00e1z\u0014\u000b@\u00d1\"\u00db\u00f9~j\u00cc\u00bf\u00b3\u009d\u00ef\u00a7\u00c6K\u0019@\u00bf\u009f\u001a/\u00dd$\r@\u00f0\u00a7\u00c6K7\u0089\u00e9\u00bf\u00e1z\u0014\u00aeG\u00e1\u0012@\u00b6\u00f3\u00fd\u00d4x\u00e9\u0010@{\u0014\u00aeG\u00e1z\u00f2\u00bf\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0014@\u00f6(\\\u008f\u00c2\u00f5\u0004@\u00db\u00f9~j\u00bct\u0003@\u00b9\u001e\u0085\u00ebQ\u00b8\n@\u00c3\u00f5(\\\u008f\u00c2\u00b5?\u0082\u0095C\u008bl\u00e7\u00fd?\u00c3\u00f5(\\\u008f\u00c2\u000f@\u0018\u00d9\u00ce\u00f7S\u00e3\u00dd\u00bf\u0096C\u008bl\u00e7\u00fb\u0002@&\u0006\u0081\u0095C\u008b\u00fe?\u00e5\u00d0\"\u00db\u00f9~\u00d2\u00bf\u0084\u00c0\u00ca\u00a1E\u00b6\u00ff?\u00db\u00f9~j\u00bct\u00f5?B`\u00e5\u00d0\"\u00db\u00e1?\u00c6 \u00b0rh\u0091\u000e@z\u00e9&1\b\u00ac\u00f6?\u00d7\u00a3p=\n\u00d7\u00e3\u00bf\u00dd$\u0006\u0081\u0095C\u00f5?\u00fa~j\u00bct\u0093\u00fc?L7\u0089A`\u00e5\u00f6\u00bf\u00be\u009f\u001a/\u00dd$\u00fa?\u00a9\u00c6K7\u0089A\u0004@}?5^\u00baI\u0001\u00c0b\u0010X9\u00b4H\u0010@\u009c\u00c4 \u00b0rh\u00d1?\u00cav\u00be\u009f\u001a/\u00d5\u00bf\u00d1\"\u00db\u00f9~j\u00bc\u00bf\u00e1z\u0014\u00aeG\u00e1\u0000@e;\u00dfO\u008d\u0097\u00ee\u00bfH\u00e1z\u0014\u00aeG\u00c1\u00bf\u00dc\u00f9~j\u00bct\b@6^\u00baI\f\u0002\u00db\u00bf\u00e5\u00d0\"\u00db\u00f9~\u00da\u00bf\u00fa~j\u00bct\u0093\u00f6?\u00b6\u00f3\u00fd\u00d4x\u00e9\u00c6\u00bf\u000e-\u00b2\u009d\u00ef\u00a7\u00f6?\u0098n\u0012\u0083\u00c0\u00ca\u00d9?q=\n\u00d7\u00a3p\u0001\u00c0\u00ad\u001cZd;\u00df\u00ef?r=\n\u00d7\u00a3p\u00dd?\u00baI\f\u0002+\u0087\t\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u00eb?y\u00e9&1\b\u00ac\u00d4\u00bf\u001dZd;\u00dfO\u00f9\u00bfd;\u00dfO\u008d\u0097\u0003@b\u0010X9\u00b4\u00c8\u00b6?r=\n\u00d7\u00a3p\u0002\u00c0\u00a8\u00c6K7\u0089A\u00f2\u00bfB`\u00e5\u00d0\"\u00db\u0000@\u00a2E\u00b6\u00f3\u00fd\u00d4\u0000\u00c0\n\u00d7\u00a3p=\n\u00e7\u00bf\u0081\u0095C\u008bl\u00e7\u0005@J\f\u0002+\u0087\u0016\u0007\u00c0=\n\u00d7\u00a3p=\u0000\u00c0\u00d7\u00a3p=\n\u00d7\u0004@[d;\u00dfO\u008d\u00fb\u00bf\u00cb\u00a1E\u00b6\u00f3\u00fd\u00f4\u00bf\u0006\u0081\u0095C\u008bl\u00f1?\u00c7K7\u0089A`\u0003\u00c0\u008f\u00c2\u00f5(\\\u008f\u0012@Zd;\u00dfO\u008d\u0002@\u00f4\u00fd\u00d4x\u00e9&\u00f3\u00bf\u008bl\u00e7\u00fb\u00a9\u00f1\u0010@\u00ef|?5^\u00ba\t@\u00e6\u00d0\"\u00db\u00f9~\u00f6\u00bf43333\u00b3\u0017@\u00c6 \u00b0rh\u0091\u00fd?h\u0091\u00ed|?5\u00fa\u00bf\u00e8\u00fb\u00a9\u00f1\u00d2M\u0017@\u00d3Mb\u0010X9\u00ec?\n\u00d7\u00a3p=\n\u0001\u00c0gfffff\u001b@\u0084\u00c0\u00ca\u00a1E\u00b6\u00fb?\u00dd$\u0006\u0081\u0095C\u00db\u00bfj\u00bct\u0093\u0018\u0004\u001a@\u00a6\u009b\u00c4 \u00b0r\u0006@\u009a\u0099\u0099\u0099\u0099\u0099\u0005\u00c0+\u0087\u0016\u00d9\u00ce\u00f7\u001a@\"\u00b0rh\u0091\u00ed\r@P\u008d\u0097n\u0012\u0083\u0001\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u001d@y\u00e9&1\b\u00ac\u0003@\u0003+\u0087\u0016\u00d9\u00ce\b\u00c0\u00b8\u001e\u0085\u00ebQ8\u001f@-\u00b2\u009d\u00ef\u00a7\u00c6\u00ef?\u00edQ\u00b8\u001e\u0085\u00eb\u00d9\u00bfH\u00e1z\u0014\u00aeG\u0017@?5^\u00baI\f\b@\u00a9\u00c6K7\u0089A\u000f\u00c0j\u00bct\u0093\u0018\u0004\u0014@\u00f8S\u00e3\u00a5\u009b\u00c4\u000b@\u0005V\u000e-\u00b2\u009d\r\u00c0;\u00dfO\u008d\u0097\u00ee\u0019@\u00be\u009f\u001a/\u00dd$\u0003@C`\u00e5\u00d0\"\u00db\u00e5?\u00ee|?5^\u00ba\u0016@\u0096C\u008bl\u00e7\u00fb\u0007@\u0091\u00ed|?5^\u00e2?v\u0093\u0018\u0004V\u008e\u001c@\u00d5x\u00e9&1\b\u0001@433333\u0000@V\u000e-\u00b2\u009do @=\n\u00d7\u00a3p=\u0001@\u00cav\u00be\u009f\u001a/\u00ff?\u001a\u0004V\u000e-\u00b2\u001a@\u0006\u0081\u0095C\u008bl\u00e7?\u00e1z\u0014\u00aeG\u00e1\u0003@\u00f9S\u00e3\u00a5\u009bD\u001b@\u00fb~j\u00bct\u0093\t@\u00f0\u00a7\u00c6K7\u0089\b@\n\u00d7\u00a3p=\u008a\u001c@\u00dfO\u008d\u0097n\u0092\u0010@T\u00e3\u00a5\u009b\u00c4 \u0005@\u007fj\u00bct\u0093\u0018\u0017@\u00e0O\u008d\u0097n\u0012\u000b@\u001a\u0004V\u000e-\u00b2\n@B`\u00e5\u00d0\"\u00db\u001d@\u00a4p=\n\u00d7\u00a3\u00c0\u00bf\u00db\u00f9~j\u00bct\u0006@\u00aa\u00f1\u00d2Mb\u0090\u001e@\u00be\u009f\u001a/\u00dd$\u0007@\u00a8\u00c6K7\u0089A\u0011@&\u0006\u0081\u0095C\u000b\u001c@~?5^\u00baI\u0007@\u0019\u0004V\u000e-2\u0016@B`\u00e5\u00d0\"\u00db\u0017@R\u00b8\u001e\u0085\u00ebQ\t@i\u0091\u00ed|?5\u0016@\u00a2E\u00b6\u00f3\u00fd\u0014\"@(1\b\u00ac\u001cZ\u0005@\u0083\u00c0\u00ca\u00a1E6\u0011@\u00bct\u0093\u0018\u0004\u0016#@\u0000\u0000\u0000\u0000\u0000\u0000\u0006@\u0002+\u0087\u0016\u00d9\u00ce\n@\u00f5\u00fd\u00d4x\u00e9\u00a6\u001e@\u00d4Mb\u0010X9\u0005@6^\u00baI\f\u0002\u001b@\u00f9S\u00e3\u00a5\u009bD\u001c@V\u000e-\u00b2\u009d\u00ef\u0005@\u007fj\u00bct\u0093\u0098\u001e@\b\u00ac\u001cZd{#@X9\u00b4\u00c8v\u00be\u0002@\u00cc\u00a1E\u00b6\u00f3\u00fd\u0015@\u00aa\u00f1\u00d2Mb\u0090%@\f\u0002+\u0087\u0016\u00d9\u0000@ \u0085\u00ebQ\u00b8\u009e\u0015@7\u0089A`\u00e5\u0010\"@\u008aA`\u00e5\u00d0\"\u0002@\u00e2z\u0014\u00aeG\u00e1\u001a@\u00cf\u00f7S\u00e3\u00a5\u001b#@d;\u00dfO\u008d\u0097\u0000@\u00aa\u00f1\u00d2Mb\u0090\u001e@;\u00dfO\u008d\u0097n\u0015@\u0093\u0018\u0004V\u000e-\u00da?\u00fb~j\u00bct\u0093\u0004@\u001dZd;\u00df\u00cf\u0012@~?5^\u00baI\u00f2?\u0000\u0000\u0000\u0000\u0000\u0000\u0003@\u0085\u00ebQ\u00b8\u001e\u0085\u0013@\u00de$\u0006\u0081\u0095C\u00ef\u00bf+\u0087\u0016\u00d9\u00ce\u00f7\u0005@\u00db\u00f9~j\u00bct\u0014@\u00fc\u00a9\u00f1\u00d2Mb\u00f4\u00bf\u00c9v\u00be\u009f\u001a/\u000e@\u0098n\u0012\u0083\u00c0\u00ca\u000e@(1\b\u00ac\u001cZ\u00ec\u00bf\u0006\u0081\u0095C\u008bl\u0003@\u001dZd;\u00df\u00cf\u0016@\u00f4\u00fd\u00d4x\u00e9&\u00ff\u00bf\u00fb~j\u00bct\u0093\u00fe?\u0093\u0018\u0004V\u000e-\u0019@\u000e-\u00b2\u009d\u00ef\u00a7\u0006\u00c0L7\u0089A`\u00e5\u0003@m\u00e7\u00fb\u00a9\u00f1\u00d2\u0017@\u0013\u0083\u00c0\u00ca\u00a1E\u00fa\u00bf$\u00db\u00f9~j\u00bc\u00e4?\u00f1\u00a7\u00c6K7\u0089\u0015@j\u00bct\u0093\u0018\u0004\u00ee\u00bf\u008e\u0097n\u0012\u0083\u00c0\u00ca?\u001eZd;\u00dfO\u001b@9\u00b4\u00c8v\u00be\u009f\u0003\u00c0u\u0093\u0018\u0004V\u000e\u00cd\u00bf43333\u00b3\u0019@Ob\u0010X9\u00b4\u000b\u00c0~?5^\u00baI\u00cc\u00bf\u00cb\u00a1E\u00b6\u00f3} @\u0018\u00d9\u00ce\u00f7S\u00e3\u0004\u00c0\u00ad\u001cZd;\u00df\u00cf?\u00f6(\\\u008f\u00c2\u00f5\u001a@q=\n\u00d7\u00a3p\u00ff\u00bf\u008e\u0097n\u0012\u0083\u00c0\u00fa\u00bf\u00f6(\\\u008f\u00c2u\u001d@\u00ea&1\b\u00ac\u001c\u0004\u00c0\u0096C\u008bl\u00e7\u00fb\u0002\u00c0\u00a3E\u00b6\u00f3\u00fd\u00d4\u0016@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00c0\u00d3Mb\u0010X9\u0000\u00c0W\u000e-\u00b2\u009do\u001c@\u0013\u0083\u00c0\u00ca\u00a1E\u00ee\u00bfZd;\u00dfO\u008d\u00f9\u00bf\u0089A`\u00e5\u00d0b!@\u00f9S\u00e3\u00a5\u009b\u00c4\r\u00c0}?5^\u00baI\u00e0?\u00a4p=\n\u00d7\u00e3!@5^\u00baI\f\u0002\u00f9\u00bf\u00cc\u00a1E\u00b6\u00f3\u00fd\u00e0?\u001f\u0085\u00ebQ\u00b8\u001e!@\u00a0\u001a/\u00dd$\u0006\u00e5\u00bf\u0091\u00ed|?5^\u00d2?\u00e5\u00d0\"\u00db\u00f9~$@d;\u00dfO\u008d\u0097\u00f8\u00bf\u0081\u0095C\u008bl\u00e7\u00f1?\u00cf\u00f7S\u00e3\u00a5\u00db%@e;\u00dfO\u008d\u0097\u00fe\u00bf_\u00baI\f\u0002+\u00d7?\\\u008f\u00c2\u00f5(\u009c$@\u000e-\u00b2\u009d\u00ef\u00a7\u0002\u00c0{\u0014\u00aeG\u00e1z\u0003@\u0083\u00c0\u00ca\u00a1E6%@*\\\u008f\u00c2\u00f5(\u00ac\u00bfNb\u0010X9\u00b4\u00f4?c\u0010X9\u00b4\b%@`\u00e5\u00d0\"\u00db\u00f9\u00de?`\u00e5\u00d0\"\u00db\u00f9\u00d6?\\\u008f\u00c2\u00f5(\u00dc#@\u00b2\u009d\u00ef\u00a7\u00c6K\u00d7?}?5^\u00baI\u0000@\u00f0\u00a7\u00c6K7\u0089&@\u0091\u00ed|?5^\b\u00c0/\u00dd$\u0006\u0081\u0095\u0005@d;\u00dfO\u008d\u00d7'@H\u00e1z\u0014\u00aeG\u00d1?\u00f0\u00a7\u00c6K7\u0089\u00fd?\u00bbI\f\u0002+\u0007*@u\u0093\u0018\u0004V\u000e\u00e1?\u0000\u0000\u0000\u0000\u0000\u0000\u00f0?H\u00e1z\u0014\u00ae\u00c7)@\u00d6x\u00e9&1\b\u00dc?\u0093\u0018\u0004V\u000e-\u00b2\u00bfJ\f\u0002+\u0087V(@ \u0085\u00ebQ\u00b8\u001e\u00dd?\u00d7\u00a3p=\n\u00d7\t@\u0017\u00d9\u00ce\u00f7S\u00a3&@_\u00baI\f\u0002+\u00d7?\u0089A`\u00e5\u00d0\"\u000f@\u00ff\u00d4x\u00e9&q,@\u00f2\u00d2Mb\u0010X\u00ed?\\\u008f\u00c2\u00f5(\\\u00f9?\u009a\u0099\u0099\u0099\u0099\u0019.@\u00c1\u00ca\u00a1E\u00b6\u00f3\u00f3?\u00d9\u00ce\u00f7S\u00e3\u00a5\u00ef?\u00f6(\\\u008f\u00c2\u00b5*@\u001b/\u00dd$\u0006\u0081\u00e9?<\u00dfO\u008d\u0097n\u000e@\u0088\u0016\u00d9\u00ce\u00f7\u00d3*@\u00d9\u00ce\u00f7S\u00e3\u00a5\u00ef?<\u00dfO\u008d\u0097n\u0013@\u00d8\u00a3p=\n\u00d7,@d;\u00dfO\u008d\u0097\u00f0?\u00d0\u00f7S\u00e3\u00a5\u009b\u0007@@5^\u00baI\u00cc.@\u0013\u0083\u00c0\u00ca\u00a1E\u00f4?\u00c3\u00f5(\\\u008f\u00c2\n@\u008e\u0097n\u0012\u0083\u0080\"@b\u0010X9\u00b4\u00c8\u0001\u00c0\"\u00b0rh\u0091\u00ed\t@\u00c7K7\u0089A\u00e0 @\u00ad\u001cZd;\u00df\u00fb\u00bf\u00a0\u001a/\u00dd$\u0006\u0007@\u00fc\u00a9\u00f1\u00d2Mb\"@sh\u0091\u00ed|?\u0006\u00c0\u0084\u00c0\u00ca\u00a1E6\u0012@\u000e-\u00b2\u009d\u00efg$@D\u008bl\u00e7\u00fb\u00a9\u0004\u00c0\u00e9&1\b\u00ac\u009c\u0013@\u0087\u0016\u00d9\u00ce\u00f7\u00d3!@-\u00b2\u009d\u00ef\u00a7F\u0011\u00c0\u00aeG\u00e1z\u0014\u00ae\u0011@Zd;\u00dfO\u008d @\u00d1\"\u00db\u00f9~j\u0000\u00c0\u007fj\u00bct\u0093\u0018\u0016@\u001eZd;\u00dfO\u001d@H\u00e1z\u0014\u00aeG\u0000\u00c0\u008bl\u00e7\u00fb\u00a9\u00f1\u0013@L7\u0089A`%#@\u00fb~j\u00bct\u0093\u0014\u00c0\u0097C\u008bl\u00e7{\u0014@R\u00b8\u001e\u0085\u00ebQ @\u009e\u00ef\u00a7\u00c6K7\u0006\u00c0\u00ea&1\b\u00ac\u009c\u001b@~?5^\u00ba\u00c9\u001e@\u00c9v\u00be\u009f\u001a/\u0001\u00c0\u00aeG\u00e1z\u0014\u00ae\u001e@H\u00e1z\u0014\u00aeG\"@1\b\u00ac\u001cZd\b\u00c0\u00e4\u00a5\u009b\u00c4 0\u001d@a\u00e5\u00d0\"\u00db\u00f9\u001d@6^\u00baI\f\u0002\r\u00c0<\u00dfO\u008d\u0097\u00ee\u001b@R\u00b8\u001e\u0085\u00eb\u0011!@\u00fe\u00d4x\u00e9&1\u00e4\u00bf\u00e5\u00d0\"\u00db\u00f9\u00fe\u0016@|\u0014\u00aeG\u00e1\u00ba\"@\u0093\u0018\u0004V\u000e-\u00da\u00bfNb\u0010X9\u00b4\u0019@\u0097C\u008bl\u00e7{\u001e@\u0014\u00aeG\u00e1z\u0014\u00ce\u00bf\u00dd$\u0006\u0081\u0095\u00c3\u0018@o\u0012\u0083\u00c0\u00caa!@\u00fa~j\u00bct\u0093\u0098\u00bfffffff\u0013@\u00f0\u00a7\u00c6K7\t @}?5^\u00ba\u00c9\u0012\u00c0\u00dd$\u0006\u0081\u0095C\f@\u0002+\u0087\u0016\u00d9N\u001e@\u0004V\u000e-\u00b2\u009d\u000f\u00c0333333\b@\u0018\u00d9\u00ce\u00f7S\u00e3\u001e@n\u00e7\u00fb\u00a9\u00f1R\u0018\u00c0\u0082\u0095C\u008bl\u00e7\t@\u008f\u00c2\u00f5(\\\u008f\u001d@\r\u0002+\u0087\u0016Y\u001a\u00c0\u00fa~j\u00bct\u0093\u0010@D\u008bl\u00e7\u00fb\u00e9!@\u00fd\u00a9\u00f1\u00d2Mb\u001b\u00c0\u00f1\u00a7\u00c6K7\u0089\u0005@\u00c5 \u00b0rh\u0011\u001a@x\u00be\u009f\u001a/]\u0018\u00c0o\u0012\u0083\u00c0\u00ca\u00a1\u0002@w\u00be\u009f\u001a/\u00dd\u0016@\u00fc\u00a9\u00f1\u00d2M\u00e2\u0015\u00c0!\u00b0rh\u0091\u00ed\u0005@R\u00b8\u001e\u0085\u00eb\u00d1\u0018@ffffff\u001c\u00c0\u0006\u0081\u0095C\u008bl\u0000@X9\u00b4\u00c8v>\u001b@\u0006\u0081\u0095C\u008bl\u0016\u00c0ffffff\u00f6?\u00db\u00f9~j\u00bc4\"@T\u00e3\u00a5\u009b\u00c4 \u00c0\u0092\u00ed|?5^\u0006@T\u00e3\u00a5\u009b\u00c4\u00a0#@\u00f0\u00a7\u00c6K7\u0089\u0018\u00c0\u0089A`\u00e5\u00d0\"\u00ff?H\u00e1z\u0014\u00ae\u0007#@sh\u0091\u00ed|\u00bf\u0014\u00c0:\u00b4\u00c8v\u00be\u009f\u00fc?\u00f9S\u00e3\u00a5\u009bD&@o\u0012\u0083\u00c0\u00ca\u00a1\u001a\u00c0\u008d\u0097n\u0012\u0083\u00c0\u00f6?M7\u0089A`%&@\u0002+\u0087\u0016\u00d9\u00ce\u001e\u00c0\u00ac\u001cZd;\u00df\u00f1?\u00c1\u00ca\u00a1E\u00b6s(@\\\u008f\u00c2\u00f5(\u00dc\u001a\u00c0\u00f4\u00fd\u00d4x\u00e9&\u0004@\u00cc\u00a1E\u00b6\u00f3\u00fd&@\u00e5\u00d0\"\u00db\u00f9\u00fe\u0016\u00c0\u0089A`\u00e5\u00d0\"\u00cb?\u00f7(\\\u008f\u00c2\u00b5&@\u00ac\u001cZd;\u00df\u0012\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u00e0?2\b\u00ac\u001cZ$)@>\n\u00d7\u00a3p\u00bd\u0017\u00c0\u00d1\"\u00db\u00f9~j\u00bc?\u00e3\u00a5\u009b\u00c4 \u00f0)@\u00a4p=\n\u00d7\u00a3\u001e\u00c0\u00aeG\u00e1z\u0014\u00ae\u0004@\u0098n\u0012\u0083\u00c0\u008a%@0\u00dd$\u0006\u0081\u0015\u0018\u00c01\b\u00ac\u001cZd\u00f1\u00bf\u00a4p=\n\u00d7c#@w\u00be\u009f\u001a/\u00dd\u0017\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\u00ec\u00bf\u00bct\u0093\u0018\u0004\u00d6%@i\u0091\u00ed|?5\u001c\u00c0}?5^\u00baI\u00f6\u00bf\u0002+\u0087\u0016\u00d9N&@\u00c9v\u00be\u009f\u001a/\u0014\u00c0;\u00dfO\u008d\u0097n\u0001\u00c0\u0091\u00ed|?5\u00de%@\u008f\u00c2\u00f5(\\\u000f\u0010\u00c0\u00fb~j\u00bct\u0093\u00fe\u00bf\u00aa\u00f1\u00d2MbP(@&\u0006\u0081\u0095C\u008b\u0014\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0004\u00c0\u00ee|?5^z$@\u00ecQ\u00b8\u001e\u0085k\u0015\u00c0\u00e0O\u008d\u0097n\u0012\u000b\u00c0T\u00e3\u00a5\u009b\u00c4`\"@R\u00b8\u001e\u0085\u00ebQ\u0015\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\t\u00c0\u009b\u0099\u0099\u0099\u0099\u00d9$@\u00dfO\u008d\u0097n\u0092\u0019\u00c0\u00bdt\u0093\u0018\u0004V\r\u00c0\u0091\u00ed|?5\u00de$@\\\u008f\u00c2\u00f5(\u00dc\u0011\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u0012\u00c0P\u008d\u0097n\u0012\u0083#@\u00d0\u00f7S\u00e3\u00a5\u009b\u0012\u00c0H\u00e1z\u0014\u00aeG\u0015\u00c0^\u00baI\f\u0002\u00ab&@u\u0093\u0018\u0004V\u000e\u0012\u00c0\u00afG\u00e1z\u0014.\u0014\u00c0\b\u00ac\u001cZd\u00bb$@\u00c2\u00ca\u00a1E\u00b6\u00f3\u000b\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u0011\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u008d(@\n\u00d7\u00a3p=\n\u0017\u00c0p\u0012\u0083\u00c0\u00ca\u00a1\u000b@\u0085\u00ebQ\u00b8\u001e\u0085'@d;\u00dfO\u008d\u0097\u0013\u00c0\u0004V\u000e-\u00b2\u009d\n@\u0000\u0000\u0000\u0000\u0000@*@S\u00b8\u001e\u0085\u00ebQ\u0017\u00c0\u00dd$\u0006\u0081\u0095\u00c3\u0012@\u00e2z\u0014\u00aeGa,@\u00fd\u00a9\u00f1\u00d2M\u00e2\u0017\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u0012@\u001dZd;\u00dfO)@\u00d3Mb\u0010X9\u001c\u00c0\u001dZd;\u00df\u00cf\u0015@$\u00db\u00f9~j\u00fc)@d;\u00dfO\u008d\u0017\u0012\u00c0\u0019\u0004V\u000e-2\u0016@\u009e\u00ef\u00a7\u00c6K\u00f7*@\u00b3\u009d\u00ef\u00a7\u00c6K\r\u00c0\u00bct\u0093\u0018\u0004V\u0014@2\b\u00ac\u001cZ\u00e4'@\u00d8\u00a3p=\n\u00d7\u0010\u00c0\u00a1\u001a/\u00dd$\u0006\u0016@\u0006\u0081\u0095C\u008b\u00ec*@\u0090\u00c2\u00f5(\\\u008f\u001f\u00c0h\u0091\u00ed|?5\u0017@\u00b2\u009d\u00ef\u00a7\u00c6\u000b+@(1\b\u00ac\u001c\u00da\u0012\u00c033333\u00b3\u001b@\\\u008f\u00c2\u00f5(\\)@*\\\u008f\u00c2\u00f5\u00a8\u0013\u00c0\u0002+\u0087\u0016\u00d9\u000e @\u00dd$\u0006\u0081\u0095C'@\u00e5\u00d0\"\u00db\u00f9~\u0014\u00c0\u008e\u0097n\u0012\u0083\u00c0\u001f@\u009c\u00c4 \u00b0r\u00a8-@{\u0014\u00aeG\u00e1z\u0012\u00c0\u009f\u00ef\u00a7\u00c6K\u00b7\u001d@i\u0091\u00ed|?u-@?5^\u00baI\f\u0013\u00c0Zd;\u00dfO\u008d!@Q\u008d\u0097n\u0012\u0003/@j\u00bct\u0093\u0018\u0084\u0012\u00c0\n\u00d7\u00a3p=\n#@\u0006\u0081\u0095C\u008b\u00ec*@\u00baI\f\u0002+\u0087\u0013\u00c0~?5^\u00baI\"@\f\u0002+\u0087\u0016\u0019*@w\u00be\u009f\u001a/\u00dd\u0013\u00c0T\u00e3\u00a5\u009b\u00c4 $@\u00cb\u00a1E\u00b6\u00f3\u00bd&@\u00f6(\\\u008f\u00c2u\u001c\u00c0\u0091\u00ed|?5\u00de\u0016@\u00f6(\\\u008f\u00c2\u00b5%@\u00ecQ\u00b8\u001e\u0085k\u0019\u00c0D\u008bl\u00e7\u00fb)\u0015@\u0087\u0016\u00d9\u00ce\u00f7S%@H\u00e1z\u0014\u00ae\u0087 \u00c0V\u000e-\u00b2\u009do\u0019@b\u0010X9\u00b4\b&@\u009e\u00ef\u00a7\u00c6Kw \u00c0\u008f\u00c2\u00f5(\\\u008f\u001d@\u00d3Mb\u0010X\u00f9%@o\u0012\u0083\u00c0\u00caa#\u00c0\u00dfO\u008d\u0097n\u0012\u0017@\u00b0rh\u0091\u00ed<\"@\u00dc\u00f9~j\u00bc\u00f4\u001f\u00c0\u00d4Mb\u0010X9\u001a@\u007fj\u00bct\u0093X!@\u00a2E\u00b6\u00f3\u00fd\u00d4\u001e\u00c0\u00b6\u00f3\u00fd\u00d4xi\u0016@)\\\u008f\u00c2\u00f5h!@h\u0091\u00ed|?\u00f5!\u00c0\u00d6x\u00e9&1\b\u001b@\u0098n\u0012\u0083\u00c0\u00ca&@q=\n\u00d7\u00a30%\u00c0\u00c5 \u00b0rh\u0011\u001a@j\u00bct\u0093\u0018D!@\u0017\u00d9\u00ce\u00f7S\u00e3\u001b\u00c0\u0084\u00c0\u00ca\u00a1E\u00b6\u001e@\u0094\u0018\u0004V\u000em\"@\u00fe\u00d4x\u00e9&1\u0018\u00c0\u00aa\u00f1\u00d2Mb\u0090\u001e@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u001c@\u0007\u0081\u0095C\u008bl\u001a\u00c0\u0082\u0095C\u008bl\u00e7\u001d@\u00cav\u00be\u009f\u001a/\u001c@\u00a4p=\n\u00d7#\u0018\u00c0#\u00db\u00f9~j<\u001a@h\u0091\u00ed|?5\u001a@2\b\u00ac\u001cZ\u00e4\u001d\u00c0\f\u0002+\u0087\u0016\u00d9\u001d@\u00de$\u0006\u0081\u0095\u00c3\u001b@b\u0010X9\u00b4\u00c8\u0017\u00c0\u00cf\u00f7S\u00e3\u00a5\u009b @+\u0087\u0016\u00d9\u00ce\u00b7!@\u00fc\u00a9\u00f1\u00d2Mb\u001e\u00c0\u00c9v\u00be\u009f\u001a/\"@\u00fe\u00d4x\u00e9&\u00b1 @&\u0006\u0081\u0095C\u000b\u001c\u00c0h\u0091\u00ed|?\u00b5#@43333s!@\u00f2\u00d2Mb\u0010X!\u00c0\f\u0002+\u0087\u0016Y\"@d;\u00dfO\u008d\u00d7#@G\u00b6\u00f3\u00fd\u00d4x\u001d\u00c0=\n\u00d7\u00a3p}\"@\u009a\u0099\u0099\u0099\u0099\u00d9%@\u00e2z\u0014\u00aeG\u00a1#\u00c0\u00c9v\u00be\u009f\u001a\u00af\u0011@43333\u00f3$@\u00bct\u0093\u0018\u0004\u0016\"\u00c0\u00a4p=\n\u00d7\u00a3\u000f@)\\\u008f\u00c2\u00f5\u00a8&@\u0098n\u0012\u0083\u00c0\n&\u00c0Nb\u0010X9\u00b4\r@33333s%@H\u00e1z\u0014\u00ae\u00c7'\u00c0$\u00db\u00f9~j\u00bc\u000f@D\u008bl\u00e7\u00fb\u00a9)@?5^\u00baI\u00cc&\u00c0\u00f2\u00d2Mb\u0010X\u000f@1\b\u00ac\u001cZd&@\u000e-\u00b2\u009d\u00efg%\u00c0\u00ac\u001cZd;\u00df\u0001@\u00c2\u00ca\u00a1E\u00b6\u00f3'@\u0012\u0083\u00c0\u00ca\u00a1\u0005$\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\u00fe?\u001a\u0004V\u000e-\u00b2$@(1\b\u00ac\u001c\u001a$\u00c0\u00a0\u001a/\u00dd$\u0006\u0000@\u00d4Mb\u0010X9*@\u00b6\u00f3\u00fd\u00d4x))\u00c0\u0092\u00ed|?5^\u0010@\u00ee|?5^:&@\u0014\u00aeG\u00e1z\u00d4'\u00c0\u00c8K7\u0089A`\u00f5?>\n\u00d7\u00a3p\u00bd'@\u0090\u00c2\u00f5(\\O)\u00c00\u00dd$\u0006\u0081\u0095\u00f9??5^\u00baIL$@m\u00e7\u00fb\u00a9\u00f1\u00d2(\u00c0\u008bl\u00e7\u00fb\u00a9\u00f1\u00f6?%\u0006\u0081\u0095C\u008b&@\u00cf\u00f7S\u00e3\u00a5\u001b'\u00c0\u00c9v\u00be\u009f\u001a/\u00bd\u00bf\f\u0002+\u0087\u0016Y(@\u00be\u009f\u001a/\u00dd\u00e4%\u00c0\u00c3\u00f5(\\\u008f\u00c2\u00c5\u00bf\u00be\u009f\u001a/\u00dd\u00e4$@h\u0091\u00ed|?\u00f5%\u00c0w\u00be\u009f\u001a/\u00dd\u00e0\u00bf\b\u00ac\u001cZd;'@\u00f0\u00a7\u00c6K7\u00c9)\u00c0\u00f2\u00d2Mb\u0010X\u00ed\u00bfi\u0091\u00ed|?u'@V\u000e-\u00b2\u009d/)\u00c02\b\u00ac\u001cZd\u00ff\u00bf#\u00db\u00f9~j\u00fc(@\u008bl\u00e7\u00fb\u00a9\u00b1*\u00c0ffffff\u00de\u00bf\u0082\u0095C\u008bl'%@?5^\u00baI\u00cc+\u00c0333333\u00e7\u00bfy\u00e9&1\b,%@\\\u008f\u00c2\u00f5(\\-\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u00f5\u00bf\u00d8\u00a3p=\nW#@\u00b7\u00f3\u00fd\u00d4x\u00e9*\u00c0\u008aA`\u00e5\u00d0\"\u00e7\u00bf\u00a6\u009b\u00c4 \u00b02%@[d;\u00dfO\u00cd,\u00c0\u008cl\u00e7\u00fb\u00a9\u00f1\u00c2?\u001c/\u00dd$\u0006\u0081+@\u0014\u00aeG\u00e1z\u00d4$\u00c0\u001b/\u00dd$\u0006\u0001\u0010@\f\u0002+\u0087\u0016\u00d9*@\u00b6\u00f3\u00fd\u00d4x\u00e9\"\u00c0h\u0091\u00ed|?5\u0010@\u00b9\u001e\u0085\u00ebQx.@E\u008bl\u00e7\u00fbi%\u00c0#\u00db\u00f9~j\u00bc\u0010@\u00e6\u00d0\"\u00db\u00f9\u00fe.@\u008bl\u00e7\u00fb\u00a91'\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\f@\u00d6x\u00e9&1\b/@43333s&\u00c0\u001c/\u00dd$\u0006\u0081\u0016@\u00e7\u00fb\u00a9\u00f1\u00d2-0@R\u00b8\u001e\u0085\u00eb\u0011#\u00c0$\u00db\u00f9~j\u00bc\u000e@\u0091\u00ed|?5\u00de/@-\u00b2\u009d\u00ef\u00a7F!\u00c0\u0093\u0018\u0004V\u000e\u00ad\u0011@\u007fj\u00bct\u0093X0@h\u0091\u00ed|?5(\u00c0\u00c1\u00ca\u00a1E\u00b6s\u0017@~?5^\u00ba\u00a91@h\u0091\u00ed|?\u00b5#\u00c0\u00dfO\u008d\u0097n\u0092\u0010@\u00a8\u00c6K7\u0089\u00e11@\u0019\u0004V\u000e-\u00b2\"\u00c0\u0091\u00ed|?5^\u0014@\u00baI\f\u0002+\u00e71@n\u00e7\u00fb\u00a9\u00f1\u00d2%\u00c0433333\u0010@sh\u0091\u00ed|?2@D\u008bl\u00e7\u00fb\u00a9\"\u00c0\u00cc\u00a1E\u00b6\u00f3\u00fd\n@fffff\u00060@\u00cav\u00be\u009f\u001a\u00af\"\u00c0$\u00db\u00f9~j\u00bc\u0003@\u00de$\u0006\u0081\u0095#0@th\u0091\u00ed|?$\u00c0y\u00e9&1\b\u00ac\u00fe?\u00f3\u00d2Mb\u0010\u00d8-@\u00ab\u00f1\u00d2Mb\u0010%\u00c0k\u00bct\u0093\u0018\u0084\u001a@ \u0085\u00ebQ\u00b8\u00de,@R\u00b8\u001e\u0085\u00ebQ#\u00c0\u00d7\u00a3p=\n\u00d7\u0019@\u00ce\u00cc\u00cc\u00cc\u00cc\f.@\u0089A`\u00e5\u00d0\"&\u00c0B`\u00e5\u00d0\"\u001b @H\u00e1z\u0014\u00ae\u00070@\\\u008f\u00c2\u00f5(\u00dc&\u00c0{\u0014\u00aeG\u00e1z @}?5^\u00ba\u0089,@}?5^\u00ba\u00c9(\u00c0d;\u00dfO\u008d\u0097 @\u0086\u00ebQ\u00b8\u001e\u00c5-@\u00ee|?5^\u00ba#\u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd!@\u0001\u0000\u0000\u0000\u0000\u0080.@L7\u0089A`e$\u00c0!\u00b0rh\u0091\u00ed#@gffff\u00a6,@\u00e0O\u008d\u0097n\u00d2)\u00c0}?5^\u00ba\u00c9\"@\u008aA`\u00e5\u00d0\u00e2*@b\u0010X9\u00b4\u00c8\"\u00c0X9\u00b4\u00c8v>\"@d;\u00dfO\u008dW*@\u0014\u00aeG\u00e1z\u00d4!\u00c0w\u00be\u009f\u001a/] @\u0082\u0095C\u008bl\u00a7)@0\u00dd$\u0006\u0081\u0095$\u00c0-\u00b2\u009d\u00ef\u00a7\u0086\"@<\u00dfO\u008d\u0097\u00ae/@\u00d3Mb\u0010Xy!\u00c0'1\b\u00ac\u001c\u001a!@\u0085\u00ebQ\u00b8\u001e\u00050@/\u00dd$\u0006\u0081U \u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\"@\u00f3\u00d2Mb\u0010\u00d8.@\u00e3\u00a5\u009b\u00c4 0 \u00c0\u00ea&1\b\u00ac\u001c\u001f@\u00de$\u0006\u0081\u0095\u00c30@\u00d7\u00a3p=\nW\"\u00c0\u00e0O\u008d\u0097nR @\"\u00b0rh\u0091-*@o\u0012\u0083\u00c0\u00ca!!\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0$@V\u000e-\u00b2\u009do(@\u00c3\u00f5(\\\u008f\u00c2\u001f\u00c0\u00fe\u00d4x\u00e9&q$@\u00a7\u009b\u00c4 \u00b0\u00f2+@\u00b7\u00f3\u00fd\u00d4x\u00e9\u001f\u00c0W\u000e-\u00b2\u009d/%@\u0085\u00ebQ\u00b8\u001e\u00c5)@\u00dc\u00f9~j\u00bct\"\u00c0\u00e1z\u0014\u00aeGa&@y\u00e9&1\b,+@\u00a6\u009b\u00c4 \u00b0\u00f2)\u00c0\u00d3Mb\u0010X9\u001d@p\u0012\u0083\u00c0\u00caa+@p\u0012\u0083\u00c0\u00ca!)\u00c0@5^\u00baI\u008c\u0019@\u00a2E\u00b6\u00f3\u00fd\u0094)@\u00a5p=\n\u00d7c,\u00c0@5^\u00baI\u008c\u001d@\"\u00b0rh\u0091\u00ed(@\u00afG\u00e1z\u0014\u00ae,\u00c0\u008bl\u00e7\u00fb\u00a9q\u0019@\u00dc\u00f9~j\u00bc4'@\u00ef|?5^:,\u00c0\u00e9&1\b\u00ac\u00dc @\u00be\u009f\u001a/\u00ddd+@\u00fa~j\u00bct\u00d3.\u00c0(1\b\u00ac\u001c\u00da\u001d@\u008e\u0097n\u0012\u0083\u0080,@6^\u00baI\f\u00c2.\u00c0u\u0093\u0018\u0004V\u00ce @\u00a0\u001a/\u00dd$\u0006*@\u00c4\u00f5(\\\u008fB0\u00c0\u00d7\u00a3p=\n\u00d7\u001d@y\u00e9&1\bl&@\u00fd\u00a9\u00f1\u00d2M\".\u00c0Zd;\u00dfOM\"@!\u00b0rh\u0091m-@<\u00dfO\u008d\u0097n/\u00c0\u0007\u0081\u0095C\u008bl\u0019@\u0000\u0000\u0000\u0000\u0000\u00c0,@L7\u0089A`\u00a5/\u00c0\u0081\u0095C\u008blg\u0014@\u00b3\u009d\u00ef\u00a7\u00c6\u00cb*@{\u0014\u00aeG\u00e1z/\u00c0\u00ecQ\u00b8\u001e\u0085k\u0013@\u0081\u0095C\u008bl'.@\u001a\u0004V\u000e-\u00f2/\u00c0/\u00dd$\u0006\u0081\u0095\u0011@\u00ad\u001cZd;\u00df/@2\b\u00ac\u001cZ\u00a4/\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2\u0019@Zd;\u00dfO\r&@\u008f\u00c2\u00f5(\\\u00cf)\u00c0\u0019\u0004V\u000e-2!@\u0015\u00aeG\u00e1zT&@\u0088\u0016\u00d9\u00ce\u00f7\u0093(\u00c0\u00b8\u001e\u0085\u00ebQ8\u001f@m\u00e7\u00fb\u00a9\u00f1\u00d2#@q=\n\u00d7\u00a30)\u00c0\u00fe\u00d4x\u00e9&\u00f1\"@\u00baI\f\u0002+G#@]\u008f\u00c2\u00f5(\u001c+\u00c0\u0014\u00aeG\u00e1z\u00d4#@\u0012\u0083\u00c0\u00ca\u00a1E!@\u00cd\u00cc\u00cc\u00cc\u00ccL(\u00c0w\u00be\u009f\u001a/\u009d!@\u0081\u0095C\u008bl\u00a7$@r=\n\u00d7\u00a3p'\u00c0\u00f2\u00d2Mb\u0010X%@\u00ecQ\u00b8\u001e\u0085\u00eb\"@\u0017\u00d9\u00ce\u00f7S\u00a3&\u00c0\u0082\u0095C\u008blg&@ \u0085\u00ebQ\u00b8\u00de%@o\u0012\u0083\u00c0\u00ca\u00e1%\u00c0\u0081\u0095C\u008blg$@\u008aA`\u00e5\u00d0\u00a2\u001f@\u00b5\u00c8v\u00be\u009f\u009a&\u00c0\u00a6\u009b\u00c4 \u00b0r\"@\u00d4Mb\u0010Xy&@\u00d1\"\u00db\u00f9~\u00aa(\u00c0\u008e\u0097n\u0012\u0083\u0080'@b\u0010X9\u00b4\b(@\u00bbI\f\u0002+\u0007*\u00c0\u0091\u00ed|?5\u00de&@\u00c7K7\u0089A\u00a0'@D\u008bl\u00e7\u00fb)'\u00c0\u00bdt\u0093\u0018\u0004\u0096(@\u0018\u00d9\u00ce\u00f7S\u00e3$@>\n\u00d7\u00a3p\u00fd)\u00c0\u00f9S\u00e3\u00a5\u009b\u00c4)@\u00e7\u00fb\u00a9\u00f1\u00d2\r$@\u009b\u0099\u0099\u0099\u0099\u0099(\u00c0\u009d\u00c4 \u00b0r\u00e8+@(1\b\u00ac\u001c\u001a$@\u00a2E\u00b6\u00f3\u00fd\u0094&\u00c0\u00d5x\u00e9&1\u00c8+@\u0012\u0083\u00c0\u00ca\u00a1\u0005#@{\u0014\u00aeG\u00e1z)\u00c0\u008aA`\u00e5\u00d0b-@Ob\u0010X9t$@\u00b1rh\u0091\u00ed|,\u00c0i\u0091\u00ed|?\u00f5)@\u00de$\u0006\u0081\u0095\u00c3 @$\u00db\u00f9~j\u00bc)\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\u001e@\u00a8\u00c6K7\u0089\u00c1!@^\u00baI\f\u0002k+\u00c043333\u00b3\u001d@d;\u00dfO\u008d\u0097\u001c@a\u00e5\u00d0\"\u00db9)\u00c0\u00f3\u00d2Mb\u0010X\u001b@\u0090\u00c2\u00f5(\\\u000f\u001d@\u00e2z\u0014\u00aeG!'\u00c0Nb\u0010X94\u001a@{\u0014\u00aeG\u00e1\u00fa\u0016@S\u00b8\u001e\u0085\u00eb\u0091)\u00c05^\u00baI\f\u0002\u001e@h\u0091\u00ed|?\u00b5\u001c@\u00ecQ\u00b8\u001e\u0085\u00eb*\u00c0\u00cav\u00be\u009f\u001a/\u0016@\u0007\u0081\u0095C\u008bl\u0019@\u0089A`\u00e5\u00d0\"*\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u00cb\u0013@\u0015\u00aeG\u00e1z\u0094\u001c@\u0001\u0000\u0000\u0000\u0000\u0000-\u00c0\u00cb\u00a1E\u00b6\u00f3}\u0017@\u000e-\u00b2\u009d\u00ef'\u0013@\u00a5p=\n\u00d7\u00e3(\u00c0W\u000e-\u00b2\u009do\u001b@=\n\u00d7\u00a3p\u00fd @v\u0093\u0018\u0004VN*\u00c0\u00c9v\u00be\u009f\u001a/\u0013@\u009e\u00ef\u00a7\u00c6Kw @J\f\u0002+\u0087\u0096*\u00c0\u00edQ\u00b8\u001e\u0085\u00eb\r@\u0091\u00ed|?5^!@\u0094\u0018\u0004V\u000e-(\u00c0+\u0087\u0016\u00d9\u00cew\u0013@\u000e-\u00b2\u009d\u00efg#@\u0011X9\u00b4\u00c86,\u00c0^\u00baI\f\u0002+\u0014@\u0018\u00d9\u00ce\u00f7S\u00e3$@\u000e-\u00b2\u009d\u00ef\u00e7,\u00c0\u00a0\u001a/\u00dd$\u0086\u0010@\u00b4\u00c8v\u00be\u009f\u009a#@I\u00e1z\u0014\u00aeG-\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0018@\"\u00b0rh\u0091m\u0016@\u0097C\u008bl\u00e7\u00bb*\u00c0\u001f\u0085\u00ebQ\u00b8^!@\u001eZd;\u00df\u00cf\u0019@\u00d3Mb\u0010X\u00f9*\u00c0`\u00e5\u00d0\"\u00dby\"@\n\u00d7\u00a3p=\n\u0011@\u00e4\u00a5\u009b\u00c4 p*\u00c0\u008bl\u00e7\u00fb\u00a9\u00b1\"@\u00f0\u00a7\u00c6K7\u0089\f@\u0004V\u000e-\u00b2\u009d+\u00c0\u00a8\u00c6K7\u0089\u0081!@y\u00e9&1\b\u00ac\u000e@\u0098n\u0012\u0083\u00c0\u008a'\u00c0>\n\u00d7\u00a3p\u00fd\"@\u00f4\u00fd\u00d4x\u00e9&\u0011@u\u0093\u0018\u0004V\u00ce+\u00c0E\u008bl\u00e7\u00fbi%@\u00fd\u00a9\u00f1\u00d2Mb\n@\u00d8\u00a3p=\n\u00d7+\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M&@P\u008d\u0097n\u0012\u0083\u0011@\u00f7(\\\u008f\u00c2\u00f5-\u00c0`\u00e5\u00d0\"\u00db9%@m\u00e7\u00fb\u00a9\u00f1\u00d2\u0004@D\u008bl\u00e7\u00fb)'\u00c0333333#@\u00f6(\\\u008f\u00c2u\u0014@\u00e2z\u0014\u00aeG\u00a1*\u00c0\u0011X9\u00b4\u00c86'@\u00d1\"\u00db\u00f9~\u00ea\u0017@\u00a2E\u00b6\u00f3\u00fdT+\u00c0R\u00b8\u001e\u0085\u00eb\u00d1&@\u00a4p=\n\u00d7#\u0013@<\u00dfO\u008d\u0097\u00ae%\u00c0\u00d7\u00a3p=\n\u0017#@0\u00dd$\u0006\u0081\u0015\u0017@\u00fc\u00a9\u00f1\u00d2M\"&\u00c0sh\u0091\u00ed|\u00ff\"@!\u00b0rh\u0091\u00ed\u0011@\u009a\u0099\u0099\u0099\u0099\u00d9\"\u00c0\u00ac\u001cZd;_#@\u00f9S\u00e3\u00a5\u009b\u00c4\u000e@\u00be\u009f\u001a/\u00dd\u00a4\"\u00c0\u00be\u009f\u001a/\u00dd$%@y\u00e9&1\b\u00ac\u000e@}?5^\u00ba\u0089!\u00c0\u008aA`\u00e5\u00d0\u00e2 @\u00f8S\u00e3\u00a5\u009b\u00c4\u0016@\u001eZd;\u00dfO!\u00c0\u00cf\u00f7S\u00e3\u00a5\u001b$@\u00f8S\u00e3\u00a5\u009b\u00c4\u0015@\u00aa\u00f1\u00d2Mb\u0090\u001e\u00c0\u00dc\u00f9~j\u00bc\u00b4$@\u00f0\u00a7\u00c6K7\u0089\u0019@\u0089A`\u00e5\u00d0\"!\u00c0D\u008bl\u00e7\u00fbi\"@\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc\n@43333\u00b3\u001e\u00c0\u007fj\u00bct\u0093\u0018!@\u009d\u00c4 \u00b0rh\u001a@\u007fj\u00bct\u0093\u00d8\"\u00c0\u00fa~j\u00bct\u00d3&@:\u00b4\u00c8v\u00be\u001f\u001c@\u00b6\u00f3\u00fd\u00d4x\u00a9$\u00c0\u00bct\u0093\u0018\u0004\u0016%@>\n\u00d7\u00a3p=\u000f@L7\u0089A`\u00e5\"\u00c0\n\u00d7\u00a3p=\n\u001d@\u0096C\u008bl\u00e7\u00fb\u0010@\u00d6x\u00e9&1\u00c8$\u00c0h\u0091\u00ed|?\u00b5\u001c@\u00e0O\u008d\u0097n\u0012\u000b@\u00ac\u001cZd;\u009f!\u00c0z\u00e9&1\b,\u0018@\u0000\u0000\u0000\u0000\u0000\u0000\u000e@\u00cav\u00be\u009f\u001a/\u001f\u00c0\u00b1rh\u0091\u00ed|\u0017@r=\n\u00d7\u00a3p\u00fd?b\u0010X9\u00b4\u0088!\u00c0\n\u00d7\u00a3p=\n\u0018@\u00d1\"\u00db\u00f9~j\u0010@\u00e1z\u0014\u00aeG!#\u00c0\u00db\u00f9~j\u00bct\u0013@\u001c/\u00dd$\u0006\u0081\u0010@b\u0010X9\u00b4H%\u00c0X9\u00b4\u00c8v>\u0014@\u00baI\f\u0002+\u0087\u00f4?\u0092\u00ed|?5^\u001f\u00c0\u0014\u00aeG\u00e1z\u0014\u0016@\u00cb\u00a1E\u00b6\u00f3}\u0016@h\u0091\u00ed|?5\"\u00c0\u00d3Mb\u0010X9\u0013@\u0000\u0000\u0000\u0000\u0000\u0080\u0016@\u0004V\u000e-\u00b2\u001d \u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\u0011@\u0018\u00d9\u00ce\u00f7Sc\u0018@\u00c7K7\u0089A`\"\u00c0\u0094\u0018\u0004V\u000e-\u0017@M7\u0089A`\u00e5\n@^\u00baI\f\u0002\u00ab\"\u00c0S\u00b8\u001e\u0085\u00ebQ\f@\u00f6(\\\u008f\u00c2\u00f5\u0002@-\u00b2\u009d\u00ef\u00a7\u0086#\u00c0\u00a7\u009b\u00c4 \u00b0r\r@\u00dc\u00f9~j\u00bct\b@'1\b\u00ac\u001c\u009a \u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\n@j\u00bct\u0093\u0018\u0004\u000f@\u00fc\u00a9\u00f1\u00d2M\u00a2#\u00c0z\u00e9&1\b\u00ac\u0005@\u00fa~j\u00bct\u0013\u001a@\u00d1\"\u00db\u00f9~\u00ea#\u00c0P\u008d\u0097n\u0012\u0083\u000f@ \u0085\u00ebQ\u00b8\u009e\u0019@S\u00b8\u001e\u0085\u00eb\u0011&\u00c0R\u00b8\u001e\u0085\u00ebQ\u0010@\u00ce\u00cc\u00cc\u00cc\u00ccL\u0019@0\u00dd$\u0006\u0081\u0095#\u00c0,\u0087\u0016\u00d9\u00ce\u00f7\u0006@Ob\u0010X94\u001e@\u00fe\u00d4x\u00e9&q#\u00c0R\u00b8\u001e\u0085\u00eb\u00d1\u0010@\u00c1\u00ca\u00a1E\u00b6\u00f3\u00f3?d;\u00dfO\u008dW#\u00c0\u00da\u00ce\u00f7S\u00e3%\u001b@\b\u00ac\u001cZd;\u00fd?~?5^\u00ba\u00c9$\u00c0}?5^\u00ba\u00c9\u001c@\u0011X9\u00b4\u00c8v\u00ce\u00bf\u0093\u0018\u0004V\u000em#\u00c0\u00a7\u009b\u00c4 \u00b0\u00f2\u001b@sh\u0091\u00ed|?\u00e5\u00bf\u00f6(\\\u008f\u00c2\u00f5\"\u00c0\u0014\u00aeG\u00e1z\u0014\u0018@\u00dfO\u008d\u0097n\u0012\u00e7\u00bffffff\u00e6 \u00c0\u001dZd;\u00dfO\u001f@\u00aeG\u00e1z\u0014\u00ae\u00e7\u00bfH\u00e1z\u0014\u00aeG&\u00c0z\u00e9&1\b,\u001d@\u00de$\u0006\u0081\u0095C\u00fd\u00bf\u00d0\u00f7S\u00e3\u00a5\u001b&\u00c0v\u0093\u0018\u0004V\u008e\u001d@\u00e8\u00fb\u00a9\u00f1\u00d2M\u00d2\u00bf\u00d9\u00ce\u00f7S\u00e3\u00e5&\u00c0h\u0091\u00ed|?u @k\u00bct\u0093\u0018\u0004\u00f8\u00bf\u0081\u0095C\u008blg\u001e\u00c0~?5^\u00baI\u001d@~?5^\u00baI\u00dc\u00bf\u00a8\u00c6K7\u0089\u0081(\u00c0\u00f4\u00fd\u00d4x\u00e9&\u0019@P\u008d\u0097n\u0012\u0083\u00e4?+\u0087\u0016\u00d9\u00ce\u00b7(\u00c0\u00a9\u00c6K7\u0089A\u0019@_\u00baI\f\u0002+\u00e7\u00bf33333s*\u00c0\u00de$\u0006\u0081\u0095\u00c3\u001a@`\u00e5\u00d0\"\u00db\u00f9\u00f0\u00bf\u001b/\u00dd$\u0006A(\u00c0\u008bl\u00e7\u00fb\u00a9q\u0013@\u00db\u00f9~j\u00bct\u0000\u00c0\u00ecQ\u00b8\u001e\u0085\u00ab&\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u0012@\u00b0rh\u0091\u00ed|\u00e3\u00bf\u0082\u0095C\u008bl\u00a7)\u00c0\u00fd\u00a9\u00f1\u00d2Mb\u000f@o\u0012\u0083\u00c0\u00ca\u00a1\u00d5\u00bf\u00bct\u0093\u0018\u0004\u0096 \u00c0\u00c9v\u00be\u009f\u001a/\"@q=\n\u00d7\u00a3p\u00e5\u00bf\u000b\u00d7\u00a3p=\n\u001c\u00c0\u00d2\"\u00db\u00f9~j#@\u00c5 \u00b0rh\u0091\u00fb\u00bf<\u00dfO\u008d\u0097\u00ee\u001a\u00c0\u00fc\u00a9\u00f1\u00d2Mb#@\u0019\u0004V\u000e-\u00b2\u00ad\u00bf\u007fj\u00bct\u0093\u0018\u0017\u00c033333\u00f3!@J\f\u0002+\u0087\u0016\u00d1\u00bfX9\u00b4\u00c8v\u00be\u001c\u00c0\u00c7K7\u0089A`&@Nb\u0010X9\u00b4\u00c8?\u00e0O\u008d\u0097n\u0012\u0019\u00c0e;\u00dfO\u008d\u0017'@L7\u0089A`\u00e5\u00f2\u00bf\u0003+\u0087\u0016\u00d9\u00ce\u001d\u00c0\u00ff\u00d4x\u00e9&q'@\u0010X9\u00b4\u00c8v\u00e2\u00bf\u000e-\u00b2\u009d\u00ef\u00a7\u0012\u00c0\f\u0002+\u0087\u0016Y\"@\u0093\u0018\u0004V\u000e-\u00ea?\u00b8\u001e\u0085\u00ebQ8 \u00c0X9\u00b4\u00c8v>&@\u007fj\u00bct\u0093\u0018\u00fc?\u0013\u0083\u00c0\u00ca\u00a1E\u001e\u00c0\u00d2\"\u00db\u00f9~\u00ea%@\u00baI\f\u0002+\u0087\u00ee?\u00dfO\u008d\u0097nR!\u00c0\u00b4\u00c8v\u00be\u009f\u001a(@%\u0006\u0081\u0095C\u008b\u00e0?\u00b2\u009d\u00ef\u00a7\u00c6\u000b\"\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8#@9\u00b4\u00c8v\u00be\u009f\u009a?)\\\u008f\u00c2\u00f5\u00e8#\u00c0d;\u00dfO\u008dW$@R\u00b8\u001e\u0085\u00ebQ\u00f6?\f\u0002+\u0087\u0016\u00d9\"\u00c0\u008bl\u00e7\u00fb\u00a9\u00b1\"@\f\u0002+\u0087\u0016\u00d9\u00ee?/\u00dd$\u0006\u0081\u0095\u0017\u00c0\u0096C\u008bl\u00e7; @2\b\u00ac\u001cZd\u00f5?\u00aeG\u00e1z\u0014.\u001b\u00c0(1\b\u00ac\u001cZ\u001f@\u0003+\u0087\u0016\u00d9\u00ce\u00f7?q=\n\u00d7\u00a3\u00f0\u0012\u00c043333\u00b3\u001d@^\u00baI\f\u0002+\u00f9?\t\u00ac\u001cZd;\u000f\u00c0\u00e6\u00d0\"\u00db\u00f9> @\u00baI\f\u0002+\u0087\u00de?\u00aa\u00f1\u00d2Mb\u0010\u0011\u00c0<\u00dfO\u008d\u0097n\u0019@\u00cf\u00f7S\u00e3\u00a5\u009b\u0006@9\u00b4\u00c8v\u00be\u001f\u0014\u00c0/\u00dd$\u0006\u0081\u0095\u001b@\u00c8K7\u0089A`\u0005@ \u0085\u00ebQ\u00b8\u001e\u0018\u00c01\b\u00ac\u001cZ\u00e4\u0019@\u0004V\u000e-\u00b2\u009d\u000b@\u00f5\u00fd\u00d4x\u00e9\u00a6\u0014\u00c0\u009a\u0099\u0099\u0099\u0099\u0019\u001f@\u0092\u00ed|?5^\u00ba?\u00c4\u00f5(\\\u008f\u00c2\b\u00c0\u0088\u0016\u00d9\u00ce\u00f7\u00d3\u0018@\u0084\u00c0\u00ca\u00a1E\u00b6\u000b@\u0083\u00c0\u00ca\u00a1E6\u0010\u00c0\u00ab\u00f1\u00d2Mb\u0090\u0017@z\u00e9&1\b\u00ac\u0006@\u00d9\u00ce\u00f7S\u00e3\u00a5\u000f\u00c0v\u0093\u0018\u0004V\u000e\u0014@h\u0091\u00ed|?5\r@D\u008bl\u00e7\u00fb\u00a9\u0004\u00c0c\u0010X9\u00b4\u00c8\u0019@?5^\u00baI\f\u0011@\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u00c0M7\u0089A`e\u001d@q=\n\u00d7\u00a3p\u0005@\n\u00d7\u00a3p=\n\u0001\u00c0\u0004V\u000e-\u00b2\u009d\u001a@}?5^\u00ba\u00c9\u0010@\u00aeG\u00e1z\u0014\u00ae\u00ff\u00bf\u009d\u00c4 \u00b0r\u00e8\u0016@\u0087\u0016\u00d9\u00ce\u00f7S\u0013@\u001b/\u00dd$\u0006\u0081\u0012\u00c0\u0098n\u0012\u0083\u00c0J\u0016@\u00e4\u00a5\u009b\u00c4 \u00b0\u0015@)\\\u008f\u00c2\u00f5(\u0012\u00c0\u00edQ\u00b8\u001e\u0085\u00eb\u0019@\u0083\u00c0\u00ca\u00a1E6\u0015@\u008d\u0097n\u0012\u0083@\u0010\u00c0\u00f0\u00a7\u00c6K7\t\u0013@V\u000e-\u00b2\u009do\u0013@E\u008bl\u00e7\u00fb\u00a9\u0016\u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\u0014@m\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd\u00bf\u00a2E\u00b6\u00f3\u00fd\u00d4\u0014\u00c0\u00a3E\u00b6\u00f3\u00fd\u00d4\u0016@z\u00e9&1\b\u00ac|?\u00cav\u00be\u009f\u001a\u00af\u0018\u00c05^\u00baI\f\u0082\u0017@\u0002+\u0087\u0016\u00d9\u00ce\u00f5\u00bfy\u00e9&1\b\u00ac\u0013\u00c0o\u0012\u0083\u00c0\u00ca!\u0013@\u0014\u00aeG\u00e1z\u0014\u00f0\u00bfn\u00e7\u00fb\u00a9\u00f1\u00d2\u0010\u00c0^\u00baI\f\u0002+\u0010@\u0002+\u0087\u0016\u00d9\u00ce\u0003\u00c0F\u00b6\u00f3\u00fd\u00d4x\u0010\u00c0\"\u00b0rh\u0091m\u0016@\u00d0\u00f7S\u00e3\u00a5\u009b\u00fe\u00bf\u00b3\u009d\u00ef\u00a7\u00c6K\u0018\u00c0&\u0006\u0081\u0095C\u008b\u000f@\u001c/\u00dd$\u0006\u0081\u00ff\u00bf\u008d\u0097n\u0012\u0083\u00c0\u001b\u00c0;\u00dfO\u008d\u0097n\u0012@\u001b/\u00dd$\u0006\u0081\u00f1\u00bf/\u00dd$\u0006\u0081\u0015\u0019\u00c0`\u00e5\u00d0\"\u00db\u00f9\t@n\u00e7\u00fb\u00a9\u00f1\u00d2\u0006\u00c0Y9\u00b4\u00c8v>\u0017\u00c09\u00b4\u00c8v\u00be\u009f\u000b@\u00a2E\u00b6\u00f3\u00fd\u00d4\u0007\u00c0\u008cl\u00e7\u00fb\u00a9\u00f1\b\u00c0\u0019\u0004V\u000e-2\u0014@\u009a\u0099\u0099\u0099\u0099\u0099\u0007\u00c0\u00e5\u00d0\"\u00db\u00f9~\u0012\u00c0\u00c6 \u00b0rh\u0011\u001b@\u0080j\u00bct\u0093\u0018\u0004\u00c0\u0006\u0081\u0095C\u008b\u00ec\u0015\u00c0\f\u0002+\u0087\u0016Y\u001c@\u00a8\u00c6K7\u0089A\u0010\u00c0\u00ecQ\u00b8\u001e\u0085\u00eb\u000f\u00c0|\u0014\u00aeG\u00e1\u00fa\u001d@\u008bl\u00e7\u00fb\u00a9\u00f1\u0013\u00c07\u0089A`\u00e5\u00d0\u000f\u00c0 \u0085\u00ebQ\u00b8\u009e\u001b@\u00e4\u00a5\u009b\u00c4 \u00b0\f\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u0004\u00c0Y9\u00b4\u00c8v\u00be\u001f@\u0087\u0016\u00d9\u00ce\u00f7\u00d3\u0011\u00c0!\u00b0rh\u0091m\u0013\u00c0!\u00b0rh\u0091m!@\u00b6\u00f3\u00fd\u00d4xi\u0012\u00c0\u00cb\u00a1E\u00b6\u00f3}\u0017\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6 @\u00e8\u00fb\u00a9\u00f1\u00d2M\f\u00c0\u00ac\u001cZd;\u00df\u0013\u00c0\u00a2E\u00b6\u00f3\u00fd\u0094\"@%\u0006\u0081\u0095C\u000b\u0011\u00c0\u0085\u00ebQ\u00b8\u001e\u0085\u00f9\u00bf\u001a\u0004V\u000e-\u00b2\u001e@\u008cl\u00e7\u00fb\u00a9q\u0016\u00c0b\u0010X9\u00b4H\u0011\u00c0\u00a4p=\n\u00d7##@\u00e2z\u0014\u00aeG\u00e1\u0019\u00c0\u001f\u0085\u00ebQ\u00b8\u009e\u0010\u00c0\u00d7\u00a3p=\n\u00d7!@V\u000e-\u00b2\u009do\u0015\u00c0\u00f6(\\\u008f\u00c2\u00f5\n\u00c0?5^\u00baI\f$@w\u00be\u009f\u001a/\u00dd\u0017\u00c0\u00e9&1\b\u00ac\u009c\u0014\u00c0\u00c8K7\u0089A\u00a0%@\u0000\u0000\u0000\u0000\u0000\u0080\u001c\u00c0\u00baI\f\u0002+\u0007\u0015\u00c0q=\n\u00d7\u00a3p&@+\u0087\u0016\u00d9\u00ce\u00f7\u0013\u00c0\u00fc\u00a9\u00f1\u00d2M\u00e2\u0016\u00c0q=\n\u00d7\u00a3\u00b0&@J\f\u0002+\u0087\u0016\u0003\u00c0ffffff\u0003\u00c09\u00b4\u00c8v\u00be\u00df @?5^\u00baI\f\u00fe\u00bf5^\u00baI\f\u0002\n\u00c0\u00d3Mb\u0010Xy!@\u000f-\u00b2\u009d\u00ef\u00a7\u00fc\u00bfD\u008bl\u00e7\u00fb\u00a9\u00f3\u00bf+\u0087\u0016\u00d9\u00ce\u00b7!@\u00e3\u00a5\u009b\u00c4 \u00b0\u0003\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\u00e6\u00bf\u00b4\u00c8v\u00be\u009f\u001a#@\u00baI\f\u0002+\u0087\u00f8\u00bf\u00c2\u00ca\u00a1E\u00b6\u00f3\u00cd\u00bfx\u00be\u009f\u001a/\u00dd\u001e@\t\u00ac\u001cZd;\u00df\u00bfi\u0091\u00ed|?5\u00f6\u00bfP\u008d\u0097n\u0012C#@\u0092\u00ed|?5^\u00ca?th\u0091\u00ed|?\u00fd\u00bfZd;\u00dfO\u00cd!@\u00c9v\u00be\u009f\u001a/\u00bd\u00bf6^\u00baI\f\u0002\u00db\u00bf\u00a6\u009b\u00c4 \u00b0\u00f2#@\u00fd\u00a9\u00f1\u00d2Mb\u00fa\u00bf\u008e\u0097n\u0012\u0083\u00c0\u00ee?\u00f0\u00a7\u00c6K7\t @^\u00baI\f\u0002+\u00e3\u00bfr=\n\u00d7\u00a3p\u0002\u00c02\b\u00ac\u001cZd%@D\u008bl\u00e7\u00fb\u00a9\u00e5\u00bf\u0011X9\u00b4\u00c8v\t\u00c0\u00ad\u001cZd;\u009f$@\"\u00b0rh\u0091\u00ed\u00f2\u00bf\u00e3\u00a5\u009b\u00c4 \u00b0\u00e2\u00bf\u00d7\u00a3p=\n\u00d7\u0019@\u00a8\u00c6K7\u0089A\u00ec\u00bfP\u008d\u0097n\u0012\u0083\u00f8\u00bfd;\u00dfO\u008d\u0017\u0019@\u00cf\u00f7S\u00e3\u00a5\u009b\u00f0\u00bf\u0004V\u000e-\u00b2\u009d\u00df?\u00b3\u009d\u00ef\u00a7\u00c6\u00cb\u0015@\u00ee|?5^\u00ba\u00e5\u00bfJ\f\u0002+\u0087\u0016\u00f7?1\b\u00ac\u001cZd\u0017@ffffff\u0003\u00c0\u0089A`\u00e5\u00d0\"\u00ef?\u00b6\u00f3\u00fd\u00d4xi\u0014@\u00fe\u00d4x\u00e9&1\u00d0\u00bf\u00db\u00f9~j\u00bct\u00a3\u00bf\u0096C\u008bl\u00e7\u00fb\u0010@$\u00db\u00f9~j\u00bc\u00e4\u00bf(1\b\u00ac\u001cZ\u00f0\u00bf\u00cc\u00a1E\u00b6\u00f3\u00fd\u000f@\u00e3\u00a5\u009b\u00c4 \u00b0\u0004\u00c0^\u00baI\f\u0002+\u0001@P\u008d\u0097n\u0012\u0083\u0013@\u00fb~j\u00bct\u0093\u00f4?\u00a4p=\n\u00d7\u00a3\u00c0\u00bfffffff\u0012@\u00cav\u00be\u009f\u001a/\u00fb?S\u00b8\u001e\u0085\u00ebQ\u00e8\u00bf\u00a7\u009b\u00c4 \u00b0r\u000e@@5^\u00baI\f\u00f6?\u00aa\u00f1\u00d2Mb\u0010\u00e4\u00bfH\u00e1z\u0014\u00aeG\u0016@\u0089A`\u00e5\u00d0\"\u00d3\u00bf\u00f5\u00fd\u00d4x\u00e9&\u00ed?\u0017\u00d9\u00ce\u00f7S\u00e3\u0007@\u0083\u00c0\u00ca\u00a1E\u00b6\u00d3\u00bfth\u0091\u00ed|?\u00ff?\u00b0rh\u0091\u00ed|\n@\u00f4\u00fd\u00d4x\u00e9&\u00e1?\u0092\u00ed|?5^\u00e6?P\u008d\u0097n\u0012\u0083\u0002@R\u00b8\u001e\u0085\u00ebQ\u00f4\u00bfK\f\u0002+\u0087\u0016\u00e9??5^\u00baI\f\u0004@\u00e5\u00d0\"\u00db\u00f9~\u0000@d;\u00dfO\u008d\u0097\u00f2?B`\u00e5\u00d0\"[\u0013@\u00c5 \u00b0rh\u0091\u00fb?S\u00b8\u001e\u0085\u00ebQ\u00fc?\u00d4Mb\u0010X\u00b9\u0016@\u00d5x\u00e9&1\b\u0001@\u008cl\u00e7\u00fb\u00a9\u00f1\u00fc?\u00e4\u00a5\u009b\u00c4 \u00b0\u000f@\u00c6 \u00b0rh\u0091\b@%\u0006\u0081\u0095C\u008b\u00e8?'1\b\u00ac\u001c\u00da\u0013@z\u00e9&1\b\u00ac\u000b\u00c0\u0003+\u0087\u0016\u00d9\u00ce\u00b7?D\u008bl\u00e7\u00fb\u00a9\u0014@\u00ecQ\u00b8\u001e\u0085\u00eb\n\u00c0\u0084\u00c0\u00ca\u00a1E\u00b6\u00eb\u00bfL7\u0089A`\u00e5\u0015@\n\u00d7\u00a3p=\u008a\u0013\u00c0\u0092\u00ed|?5^\u00da?6^\u00baI\f\u0082\u0013@}?5^\u00baI\u0014\u00c0{\u0014\u00aeG\u00e1z\u00f0?\u0085\u00ebQ\u00b8\u001e\u0005\u0010@\u0091\u00ed|?5\u00de\u0015\u00c0\u00bct\u0093\u0018\u0004V\u00f4?\u00fb~j\u00bct\u0013\u0018@)\\\u008f\u00c2\u00f5\u00a8\u0016\u00c0T\u00e3\u00a5\u009b\u00c4 \u00ec\u00bf\u00d1\"\u00db\u00f9~j\u0012@2\b\u00ac\u001cZ\u00e4\u0016\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u00f7\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u0016@\u00baI\f\u0002+\u0087\u0018\u00c0\u00a8\u00c6K7\u0089A\u0002@Zd;\u00dfO\r\u0017@:\u00b4\u00c8v\u00be\u001f\u001c\u00c0\u00bct\u0093\u0018\u0004V\u00e2\u00bfo\u0012\u0083\u00c0\u00ca\u00a1\u0010@\u00d2\"\u00db\u00f9~j\u001e\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u00f7\u00bf=\n\u00d7\u00a3p=\u0010@S\u00b8\u001e\u0085\u00eb\u00d1\u001e\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u008e\u00bf\u00c9v\u00be\u009f\u001a/\u0013@\u008e\u0097n\u0012\u0083@\u001c\u00c0\u00fa~j\u00bct\u0093h?c\u0010X9\u00b4\u00c8\t@\u0093\u0018\u0004V\u000e-\u0014\u00c0h\u0091\u00ed|?5\u00fa\u00bf\u00d3Mb\u0010X9\r@\u009c\u00c4 \u00b0rh\u0011\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u0000\u00c0\u00d1\"\u00db\u00f9~j\u0010@&\u0006\u0081\u0095C\u008b\u0014\u00c0\u0099n\u0012\u0083\u00c0\u00ca\u00ed?D\u008bl\u00e7\u00fb)\u001d@\u00d1\"\u00db\u00f9~j\u0012\u00c0b\u0010X9\u00b4\u00c8\u00b6?\u0088\u0016\u00d9\u00ce\u00f7\u00d3\u001d@d;\u00dfO\u008d\u0097\u0015\u00c0\u00a6\u009b\u00c4 \u00b0r\u00fc?&\u0006\u0081\u0095C\u00cb @\u0010X9\u00b4\u00c8\u00f6\u0019\u00c0\u000f-\u00b2\u009d\u00ef\u00a7\u00fc?\u00a0\u001a/\u00dd$\u00c6 @^\u00baI\f\u0002\u00ab\u0013\u00c0\u00a7\u009b\u00c4 \u00b0r\t@\u009a\u0099\u0099\u0099\u0099Y @\u00be\u009f\u001a/\u00dd$\u0013\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u00f3?\u0006\u0081\u0095C\u008bl#@/\u00dd$\u0006\u0081\u0015\u0014\u00c0~?5^\u00baI\u00fe?\u00fa~j\u00bct\u0013%@\u00a5p=\n\u00d7\u00a3\r\u00c01\b\u00ac\u001cZd\u00f3?\u0002+\u0087\u0016\u00d9\u000e#@6^\u00baI\f\u0002\u0017\u00c0\u00bct\u0093\u0018\u0004V\u0010@\u0093\u0018\u0004V\u000em @Nb\u0010X94\u0015\u00c0\u00db\u00f9~j\u00bct\u00c3\u00bf\u00f8S\u00e3\u00a5\u009bD$@\u00e2z\u0014\u00aeG\u00e1\u0019\u00c0\u001f\u0085\u00ebQ\u00b8\u001e\u00e1\u00bfu\u0093\u0018\u0004V\u00ce#@\u00c5 \u00b0rh\u0091\u0012\u00c0]\u008f\u00c2\u00f5(\\\u00eb\u00bfh\u0091\u00ed|?\u00f5%@\u00aa\u00f1\u00d2Mb\u0010\r\u00c0\u00d8\u00a3p=\n\u00d7\u000b@\u00b9\u001e\u0085\u00ebQ\u00b8\u001f@r=\n\u00d7\u00a3p\u0007\u00c0\u0000\u0000\u0000\u0000\u0000\u0000\u0006@0\u00dd$\u0006\u0081\u0095\u001f@\u0083\u00c0\u00ca\u00a1E\u00b6\b\u00c0th\u0091\u00ed|?\u0013@\u00e6\u00d0\"\u00db\u00f9\u00fe\u001e@\u00cf\u00f7S\u00e3\u00a5\u009b\n\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2\u00cd\u0015@\u0019\u0004V\u000e-2!@\b\u00ac\u001cZd;\u000e\u00c0d;\u00dfO\u008d\u0017\u0016@K\f\u0002+\u0087\u0016\u001a@\u00a7\u009b\u00c4 \u00b0r\u00f8\u00bfZd;\u00dfO\r\u0013@I\u00e1z\u0014\u00aeG\u001e@[d;\u00dfO\u008d\u00f5\u00bf\u008e\u0097n\u0012\u0083\u00c0\u000f@\u0018\u00d9\u00ce\u00f7Sc\u001b@\u00f6(\\\u008f\u00c2\u00f5\u000f\u00c0\u00f4\u00fd\u00d4x\u00e9&\u001b@\u00d2\"\u00db\u00f9~j\u001a@|\u0014\u00aeG\u00e1z\u00e8\u00bfI\u00e1z\u0014\u00aeG\u0018@\u0018\u00d9\u00ce\u00f7Sc\u001c@^\u00baI\f\u0002+\u00f3\u00bf>\n\u00d7\u00a3p=\u001a@q=\n\u00d7\u00a3\u00f0\u0018@\u001c/\u00dd$\u0006\u0081\u00e5\u00bf.\u00b2\u009d\u00ef\u00a7F\u001b@\u0014\u00aeG\u00e1z\u0094\u001f@\u00f4\u00fd\u00d4x\u00e9&\u00d1?\u00da\u00ce\u00f7S\u00e3\u00a5\u0017@\u00da\u00ce\u00f7S\u00e3%\u001b@\u00f0\u00a7\u00c6K7\u0089\u00e9\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u0011@\u00da\u00ce\u00f7S\u00e3\u00a5!@\u0006\u0081\u0095C\u008bl\u00f5\u00bf\u000e-\u00b2\u009d\u00ef\u00a7\u000b@\u00fe\u00d4x\u00e9&\u00b1\"@?5^\u00baI\f\u00c2?\u00d9\u00ce\u00f7S\u00e3\u00a5\u000e@\u00ecQ\u00b8\u001e\u0085\u00eb @;\u00dfO\u008d\u0097n\u00e2\u00bf\u001eZd;\u00df\u00cf\u0013@X9\u00b4\u00c8v>#@\f\u0002+\u0087\u0016Y\u0010\u00c0\u0089A`\u00e5\u00d0\"\u0013@\u0085\u00ebQ\u00b8\u001e\u0005\u0016@\u00cc\u00a1E\u00b6\u00f3\u00fd\u000f\u00c0\u00c9v\u00be\u009f\u001a/\u000e@\u0014\u00aeG\u00e1z\u0014\u0016@\u0004V\u000e-\u00b2\u001d\u0013\u00c0{\u0014\u00aeG\u00e1z\u0015@\u00d5x\u00e9&1\u0088\u0011@Zd;\u00dfO\u008d\u0010\u00c0\u0019\u0004V\u000e-\u00b2\u0018@J\f\u0002+\u0087\u0016\u0010@\u001eZd;\u00df\u00cf\u0018\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\u0017@)\\\u008f\u00c2\u00f5\u00a8\u0012@\u001c/\u00dd$\u0006\u0001\u0013\u00c0\u00f4\u00fd\u00d4x\u00e9&\u0011@\u00e5\u00d0\"\u00db\u00f9~\n@?5^\u00baI\f\u000e\u00c0<\u00dfO\u008d\u0097n\u000f@\u00a7\u009b\u00c4 \u00b0r\b@\u0006\u0081\u0095C\u008b\u00ec\u0014\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u000b@\u00aeG\u00e1z\u0014\u00ae\r@\u00f9S\u00e3\u00a5\u009b\u00c4\u0019\u00c0\u000b\u00d7\u00a3p=\n\u001c@\u0002+\u0087\u0016\u00d9\u00ce\u0010@fffff\u00e6\u0015\u00c0\u00be\u009f\u001a/\u00dd\u00a4\u0012@\u00a0\u001a/\u00dd$\u0006\u0000@8\u0089A`\u00e5P\u0019\u00c0\u00f8S\u00e3\u00a5\u009bD\u0015@\u00cf\u00f7S\u00e3\u00a5\u009b\u0001@~?5^\u00baI\u0012\u00c0\u00fe\u00d4x\u00e9&\u00b1\u0015@,\u0087\u0016\u00d9\u00ce\u00f7\u00f1?333333\u0011\u00c0b\u0010X9\u00b4H\u0019@\u00b9\u001e\u0085\u00ebQ\u00b8\u00fa?p\u0012\u0083\u00c0\u00ca\u00a1\r\u00c0\u0004V\u000e-\u00b2\u001d\u0013@+\u0087\u0016\u00d9\u00ce\u00f7\u00ef?\u00cf\u00f7S\u00e3\u00a5\u001b\u0014\u00c0\u008f\u00c2\u00f5(\\\u008f\u0016@$\u00db\u00f9~j\u00bc\u00c4?\u0084\u00c0\u00ca\u00a1E6\u0018\u00c0\u00f1\u00a7\u00c6K7\u0089\u000b@b\u0010X9\u00b4\u00c8\u00f4?*\\\u008f\u00c2\u00f5\u00a8\u001a\u00c0\u001b/\u00dd$\u0006\u0081\r@433333\u00db?{\u0014\u00aeG\u00e1z\u0015\u00c0\u007fj\u00bct\u0093\u0018\u0005@\u00a8\u00c6K7\u0089A\u00f0?\u00bdt\u0093\u0018\u0004\u00d6\u001a\u00c0h\u0091\u00ed|?5\b@\u00a6\u009b\u00c4 \u00b0r\u0000@c\u0010X9\u00b4H\u001c\u00c0\u00aa\u00f1\u00d2Mb\u0090\u0014@\u00e1z\u0014\u00aeGa\u0015@\u00d2\"\u00db\u00f9~\u00ea\u001a\u00c0<\u00dfO\u008d\u0097\u00ee\u0010@j\u00bct\u0093\u0018\u0084\u0016@\u00f2\u00d2Mb\u0010\u00d8 \u00c01\b\u00ac\u001cZ\u00e4\u0015@\u00c9v\u00be\u009f\u001a\u00af\u0016@\u0014\u00aeG\u00e1z\u0094!\u00c0\u0002+\u0087\u0016\u00d9N\u0018@w\u00be\u009f\u001a/]\u0013@\u00c9v\u00be\u009f\u001a/!\u00c0\u009e\u00ef\u00a7\u00c6K7\u0019@\u0014\u00aeG\u00e1z\u0094\u001b@\b\u00ac\u001cZd\u00bb\"\u00c0\u0091\u00ed|?5\u00de\u0010@\u00bbI\f\u0002+\u0087\u0016@D\u008bl\u00e7\u00fb)\"\u00c0b\u0010X9\u00b4\u00c8\u000b@`\u00e5\u00d0\"\u00dby\u0019@\"\u00b0rh\u0091\u00ed\"\u00c0z\u00e9&1\b\u00ac\u001c@\u0090\u00c2\u00f5(\\\u000f\u001c@=\n\u00d7\u00a3p\u00bd%\u00c0\u007fj\u00bct\u0093\u0098\u0012@\u00ecQ\u00b8\u001e\u0085k\u0017@\u009e\u00ef\u00a7\u00c6K7&\u00c0\u008aA`\u00e5\u00d0\u00a2\u0015@\u00c2\u00ca\u00a1E\u00b6s\u0014@\u008d\u0097n\u0012\u0083\u0000'\u00c0 \u0085\u00ebQ\u00b8\u001e\u000e@\u00b0rh\u0091\u00ed\u00fc\u0016@$\u00db\u00f9~j\u00fc%\u00c0V\u000e-\u00b2\u009do\u0014@R\u00b8\u001e\u0085\u00ebQ\u001b@\u00c8K7\u0089A #\u00c0\u00dfO\u008d\u0097n\u0012\f@\u00d9\u00ce\u00f7S\u00e3%\u0011@\"\u00b0rh\u0091-$\u00c0\u00a4p=\n\u00d7\u00a3\u0004@\u00db\u00f9~j\u00bc\u00f4\u0011@\u0091\u00ed|?5\u00de#\u00c0\u0004V\u000e-\u00b2\u009d\u0010@x\u00be\u009f\u001a/\u00dd\u000b@\u0014\u00aeG\u00e1z\u0014!\u00c0\u00c3\u00f5(\\\u008f\u00c2\n@\u00c6 \u00b0rh\u0091\u000f@\u00d0\u00f7S\u00e3\u00a5\u009b\u001e\u00c0\u000f-\u00b2\u009d\u00ef\u00a7\u0018@L7\u0089A`e\u001f@\u009e\u00ef\u00a7\u00c6K7\u001c\u00c02\b\u00ac\u001cZd\u0015@d;\u00dfO\u008d\u0017\u001f@\u00a1\u001a/\u00dd$\u0086\u001e\u00c0\u00f3\u00d2Mb\u0010X\u001c@\u0087\u0016\u00d9\u00ce\u00f7\u0013\"@\u0091\u00ed|?5^!\u00c0\u0003+\u0087\u0016\u00d9\u00ce\u001c@T\u00e3\u00a5\u009b\u00c4\u00a0\"@\u0015\u00aeG\u00e1z\u0094\u001c\u00c0?5^\u00baI\f!@T\u00e3\u00a5\u009b\u00c4\u00a0!@\u0098n\u0012\u0083\u00c0\u00ca\u001b\u00c09\u00b4\u00c8v\u00be\u001f\u0019@\u00baI\f\u0002+G$@\u008cl\u00e7\u00fb\u00a9q\u001b\u00c0F\u00b6\u00f3\u00fd\u00d4\u00f8\u001b@\u0094\u0018\u0004V\u000e\u00ed%@\u00d4Mb\u0010X\u00b9\u0017\u00c06^\u00baI\f\u0002\u0018@+\u0087\u0016\u00d9\u00ce\u00b7#@Ob\u0010X94\u001e\u00c0\u00e6\u00d0\"\u00db\u00f9\u00be\"@\u008bl\u00e7\u00fb\u00a91#@{\u0014\u00aeG\u00e1z\u001e\u00c0K\f\u0002+\u0087\u0016\u0014@q=\n\u00d7\u00a3p%@w\u00be\u009f\u001a/]!\u00c0x\u00be\u009f\u001a/\u00dd\u0014@\u00b4\u00c8v\u00be\u009f\u009a%@,\u0087\u0016\u00d9\u00cew\u001e\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u0010@\u001c/\u00dd$\u0006\u0001$@\u00ff\u00d4x\u00e9&1\u001c\u00c0\u00f2\u00d2Mb\u0010X\u0012@fffff&(@\\\u008f\u00c2\u00f5(\u00dc\u0017\u00c0\u00dd$\u0006\u0081\u0095\u00c3\u0012@$\u00db\u00f9~j<(@,\u0087\u0016\u00d9\u00ce\u00f7\u001d\u00c0:\u00b4\u00c8v\u00be\u001f\u0015@\u00c6 \u00b0rh\u0091)@\u00e3\u00a5\u009b\u00c4 \u00b0\u001d\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\t@\u00b6\u00f3\u00fd\u00d4x\u00e9(@b\u0010X9\u00b4\u00c8\u001f\u00c0\u00e9&1\b\u00ac\u001c\u0005@\u00f4\u00fd\u00d4x\u00e9\u00a6'@\u00e8\u00fb\u00a9\u00f1\u00d2M\u0019\u00c0\u000f-\u00b2\u009d\u00ef\u00a7\b@\u00b4\u00c8v\u00be\u009f\u001a-@+\u0087\u0016\u00d9\u00cew\u0017\u00c0\u0082\u0095C\u008bl\u00e7\u000f@8\u0089A`\u00e5\u0010-@\u00a5p=\n\u00d7#\u001a\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u0005@\u00aeG\u00e1z\u0014\u00ee.@\u00aa\u00f1\u00d2Mb\u0010\u001e\u00c0%\u0006\u0081\u0095C\u008b\u00f6?\u0017\u00d9\u00ce\u00f7S\u00a3+@\u0011X9\u00b4\u00c8\u00f6\u001f\u00c0\u00c6 \u00b0rh\u0091\u00e9?d;\u00dfO\u008dW*@E\u008bl\u00e7\u00fb\u00a9\u001c\u00c0T\u00e3\u00a5\u009b\u00c4 \u00f0?\u00b4\u00c8v\u00be\u009fZ-@\u008cl\u00e7\u00fb\u00a9q\u001c\u00c0\u0018\u00d9\u00ce\u00f7S\u00e3\u0004@W\u000e-\u00b2\u009d/+@\u00edQ\u00b8\u001e\u0085\u00eb\u0019\u00c0\u008d\u0097n\u0012\u0083\u0080!@\u0094\u0018\u0004V\u000e\u00ad\u001e@\u00e3\u00a5\u009b\u00c4 \u00b0\u0018\u00c0\u00bct\u0093\u0018\u0004\u0016 @J\f\u0002+\u0087\u0016\u001c@I\u00e1z\u0014\u00aeG\u0018\u00c0\u00a2E\u00b6\u00f3\u00fd\u0014$@R\u00b8\u001e\u0085\u00eb\u00d1\u001c@\u00e4\u00a5\u009b\u00c4 0\u0018\u00c0?5^\u00baI\u008c%@\u00b2\u009d\u00ef\u00a7\u00c6\u000b @5^\u00baI\f\u0082\u001b\u00c0\u0003+\u0087\u0016\u00d9N%@\u00f5\u00fd\u00d4x\u00e9&\u0018@\u00d3Mb\u0010X9\u0012\u00c0\u00fe\u00d4x\u00e9&1$@\u00a0\u001a/\u00dd$\u0086\u001b@\u0004V\u000e-\u00b2\u001d\u0011\u00c0\u00e3\u00a5\u009b\u00c4 0&@\u0083\u00c0\u00ca\u00a1E6\u001a@X9\u00b4\u00c8v\u00be\u001d\u00c0$\u00db\u00f9~j|'@\u00a6\u009b\u00c4 \u00b0\u00f2\u0018@\u00ecQ\u00b8\u001e\u0085\u00eb\f\u00c0F\u00b6\u00f3\u00fd\u00d4\u00b8#@\u0089A`\u00e5\u00d0\" @&\u0006\u0081\u0095C\u008b\u000f\u00c0\u00cf\u00f7S\u00e3\u00a5\u001b\"@;\u00dfO\u008d\u0097n!@\u00e7\u00fb\u00a9\u00f1\u00d2M\u0004\u00c0w\u00be\u009f\u001a/\u00dd#@\u00d9\u00ce\u00f7S\u00e3\u00a5\u001f@\u00a4p=\n\u00d7\u00a3\u000f\u00c0\u00bct\u0093\u0018\u0004V%@\u00c1\u00ca\u00a1E\u00b6s!@\u00fc\u00a9\u00f1\u00d2Mb\u0011\u00c0X9\u00b4\u00c8v~\"@J\f\u0002+\u0087\u0016\u0017@\u008bl\u00e7\u00fb\u00a9\u00f1\u0010\u00c0\u00fe\u00d4x\u00e9&\u00b1 @\u00bdt\u0093\u0018\u0004V\u0018@\u00f5\u00fd\u00d4x\u00e9&\u001c\u00c0\u00e3\u00a5\u009b\u00c4 \u00f0#@<\u00dfO\u008d\u0097n\u0013@\u00b7\u00f3\u00fd\u00d4x\u00e9\u001a\u00c0\u00a0\u001a/\u00dd$\u0006\"@33333\u00b3\u0013@\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u001d\u00c0\u00f3\u00d2Mb\u0010\u0018%@z\u00e9&1\b\u00ac\f@\u00ea&1\b\u00ac\u001c\u001f\u00c0\\\u008f\u00c2\u00f5(\u001c'@\u009b\u0099\u0099\u0099\u0099\u0099\u000e@\u007fj\u00bct\u0093\u0098!\u00c0\u00ee|?5^\u00fa#@\u0001\u0000\u0000\u0000\u0000\u0000\b@>\n\u00d7\u00a3p=\u0019\u00c0\u00e0O\u008d\u0097n\u0012%@\u00fe\u00d4x\u00e9&1\u0004@\r\u0002+\u0087\u0016Y\u001a\u00c0\u00c3\u00f5(\\\u008f\u00c2%@ffffff\u00f8?i\u0091\u00ed|?\u00b5\u0018\u00c0\u00e3\u00a5\u009b\u00c4 \u00f0\"@\n\u00d7\u00a3p=\n\u0003@\\\u008f\u00c2\u00f5(\u001c\"\u00c0B`\u00e5\u00d0\"[$@ \u0085\u00ebQ\u00b8\u001e\u00fd?\u0013\u0083\u00c0\u00ca\u00a1E\u0014\u00c0F\u00b6\u00f3\u00fd\u00d4\u00b8&@\\\u008f\u00c2\u00f5(\\\u0007@#\u00db\u00f9~j<\u0012\u00c0\n\u00d7\u00a3p=\u00ca%@\u00e0O\u008d\u0097n\u0012\u000e@h\u0091\u00ed|?5\u0011\u00c0b\u0010X9\u00b4\u00c8&@\u00aa\u00f1\u00d2Mb\u0010\u0001@\b\u00ac\u001cZd;\u0016\u00c0Zd;\u00dfO\u008d)@\u00c8K7\u0089A`\n@\u009c\u00c4 \u00b0rh\u0018\u00c0q=\n\u00d7\u00a3p*@X9\u00b4\u00c8v\u00be\u0003@\u00cd\u00cc\u00cc\u00cc\u00ccL\u0018\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0)@\u0000\u0000\u0000\u0000\u0000\u0000\u0011@\u00e7\u00fb\u00a9\u00f1\u00d2M\u0011\u00c0\u00a6\u009b\u00c4 \u00b02+@\u0010X9\u00b4\u00c8v\f@\u00c2\u00ca\u00a1E\u00b6\u00f3\f\u00c0\u00cc\u00a1E\u00b6\u00f3\u00fd*@x\u00be\u009f\u001a/\u00dd\u0005@I\u00e1z\u0014\u00aeG\u000e\u00c0\u0004V\u000e-\u00b2]*@\u00f4\u00fd\u00d4x\u00e9\u00a6\u0011@\u00cf\u00f7S\u00e3\u00a5\u001b\u0013\u00c0Nb\u0010X9\u00f4-@\u0018\u00d9\u00ce\u00f7S\u00e3\u000e@L7\u0089A`\u00e5\u0015\u00c0\u00f0\u00a7\u00c6K7\u00c9-@\u00ac\u001cZd;_\u0012@\u00e3\u00a5\u009b\u00c4 0\u0010\u00c0\u00f4\u00fd\u00d4x\u00e9\u00e6.@V\u000e-\u00b2\u009do\u0011@\u0007\u0081\u0095C\u008bl\u0014\u00c0m\u00e7\u00fb\u00a9\u00f1\u0012/@\u0083\u00c0\u00ca\u00a1E\u00b6\b@X9\u00b4\u00c8v~#\u00c0\u00ee|?5^\u00fa\"@\u00c1\u00ca\u00a1E\u00b6\u00f3\u000e@\u0098n\u0012\u0083\u00c0\n#\u00c0b\u0010X9\u00b4\u00c8\"@\u0017\u00d9\u00ce\u00f7Sc\u0013@\u0006\u0081\u0095C\u008b,&\u00c0\u00ee|?5^\u00fa!@\u00fd\u00a9\u00f1\u00d2Mb\u000b@T\u00e3\u00a5\u009b\u00c4\u00e0%\u00c0\u00c9v\u00be\u009f\u001ao @\u00b2\u009d\u00ef\u00a7\u00c6K\u0005@1\b\u00ac\u001cZ\u00a4'\u00c0z\u00e9&1\b,$@\u0098n\u0012\u0083\u00c0\u00ca\u0004@\u008f\u00c2\u00f5(\\\u00cf'\u00c0\u00be\u009f\u001a/\u00dd\u00a4 @\u001b/\u00dd$\u0006\u0001\u0012@:\u00b4\u00c8v\u00be\u009f(\u00c0`\u00e5\u00d0\"\u00db9\"@\u0085\u00ebQ\u00b8\u001e\u0085\u0014@q=\n\u00d7\u00a3p&\u00c0(1\b\u00ac\u001cZ\u001f@\u0012\u0083\u00c0\u00ca\u00a1\u00c5\u0014@\u0088\u0016\u00d9\u00ce\u00f7\u00d3(\u00c0o\u0012\u0083\u00c0\u00ca\u00a1#@\u00fc\u00a9\u00f1\u00d2Mb\u00f8?\u00a6\u009b\u00c4 \u00b0\u00f2)\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u001d@\u00e7\u00fb\u00a9\u00f1\u00d2M\u000f@\u00e6\u00d0\"\u00db\u00f9>+\u00c0P\u008d\u0097n\u0012C @\u00d9\u00ce\u00f7S\u00e3\u00a5\n@\u00f4\u00fd\u00d4x\u00e9&)\u00c0\u0082\u0095C\u008bl\u00e7\u001a@\u008cl\u00e7\u00fb\u00a9\u00f1\t@\u0081\u0095C\u008bl\u00a7+\u00c0\u00f4\u00fd\u00d4x\u00e9\u00a6\u001b@R\u00b8\u001e\u0085\u00eb\u00d1\u0013@\u00bct\u0093\u0018\u0004\u00d6,\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\u001e@L7\u0089A`\u00e5\u0015@\u00cb\u00a1E\u00b6\u00f3=*\u00c0\u008cl\u00e7\u00fb\u00a9q\u001a@\u00fc\u00a9\u00f1\u00d2M\u00e2\u0016@\u0005V\u000e-\u00b2]-\u00c0\n\u00d7\u00a3p=\n\u0017@o\u0012\u0083\u00c0\u00ca!\u0012@h\u0091\u00ed|?\u00b5,\u00c0\u00db\u00f9~j\u00bct\u0013@L7\u0089A`e\u0013@\u0084\u00c0\u00ca\u00a1EV0\u00c0\u00cav\u00be\u009f\u001a/\u001c@\u008aA`\u00e5\u00d0\"\r@\u00f4\u00fd\u00d4x\u00e9F1\u00c0ffffff\u001c@\u00d6x\u00e9&1\b\n@\u00c8K7\u0089A\u00000\u00c0\u0011X9\u00b4\u00c8\u00f6\u001f@\u008cl\u00e7\u00fb\u00a9\u00f1\f@;\u00dfO\u008d\u0097\u00ae0\u00c0\u009c\u00c4 \u00b0rh\u0013@\u0014\u00aeG\u00e1z\u0014\u000e@|\u0014\u00aeG\u00e1:0\u00c0\u0004V\u000e-\u00b2\u009d\u000f@8\u0089A`\u00e5\u00d0\r@\u00ecQ\u00b8\u001e\u0085\u008b1\u00c0\u00c9v\u00be\u009f\u001a/\u0014@>\n\u00d7\u00a3p=\n@Zd;\u00dfO\u00cd/\u00c0+\u0087\u0016\u00d9\u00cew\u0017@\u009a\u0099\u0099\u0099\u0099\u0019\u0010@V\u000e-\u00b2\u009d\u00ef'\u00c0K\f\u0002+\u0087\u0096&@5^\u00baI\f\u0002\n@\u00dd$\u0006\u0081\u0095C'\u00c0\u00e0O\u008d\u0097n\u0092&@\u0098n\u0012\u0083\u00c0\u00ca\u0010@\u00ea&1\b\u00ac\\)\u00c0\u00cav\u00be\u009f\u001a\u00ef(@\u009f\u00ef\u00a7\u00c6K7\u0005@\u00fe\u00d4x\u00e9&q+\u00c0j\u00bct\u0093\u0018\u0084(@\u00d3Mb\u0010X9\u0003@e;\u00dfO\u008d\u0017(\u00c0\u0086\u00ebQ\u00b8\u001e\u0005*@\u00aa\u00f1\u00d2Mb\u0010\u00f6?-\u00b2\u009d\u00ef\u00a7\u0086)\u00c0fffff&+@,\u0087\u0016\u00d9\u00ce\u00f7\r@\u00ee|?5^z*\u00c0\u00e4\u00a5\u009b\u00c4 \u00f0,@\f\u0002+\u0087\u0016\u00d9\n@X9\u00b4\u00c8v~'\u00c0\u00e1z\u0014\u00aeG\u00a1+@m\u00e7\u00fb\u00a9\u00f1R\u0010@\u00b9\u001e\u0085\u00ebQx)\u00c0\u0089A`\u00e5\u00d0b+@F\u00b6\u00f3\u00fd\u00d4x\u00e5?\\\u008f\u00c2\u00f5(\u00dc*\u00c0\\\u008f\u00c2\u00f5(\\*@`\u00e5\u00d0\"\u00db\u00f9\u0013@^\u00baI\f\u0002k,\u00c0T\u00e3\u00a5\u009b\u00c4`(@\u00c1\u00ca\u00a1E\u00b6\u00f3\u0013@\u00ee|?5^:*\u00c0Nb\u0010X9t+@\u001a\u0004V\u000e-2\u0018@[d;\u00dfO\u008d%\u00c0\u00aeG\u00e1z\u0014n)@\u00a8\u00c6K7\u0089A\u00f2?\u0010X9\u00b4\u00c8v$\u00c0\u00c4\u00f5(\\\u008f\u00c2(@:\u00b4\u00c8v\u00be\u009f\u00fe?\u00ce\u00cc\u00cc\u00cc\u00cc\f$\u00c0r=\n\u00d7\u00a3\u00f0)@\u00c2\u00ca\u00a1E\u00b6\u00f3\u00bd\u00bfr=\n\u00d7\u00a3\u00f0$\u00c0th\u0091\u00ed|\u00bf+@\u00f8S\u00e3\u00a5\u009b\u00c4\u00e0\u00bf\u00c9v\u00be\u009f\u001a\u00af$\u00c0H\u00e1z\u0014\u00ae\u00c7'@\u009a\u0099\u0099\u0099\u0099\u0099\u00f1\u00bf\u0091\u00ed|?5\u001e!\u00c0\u0014\u00aeG\u00e1z\u0094*@\u00fc\u00a9\u00f1\u00d2Mb\u00c0?\u00d2\"\u00db\u00f9~\u00ea\u001f\u00c0\u0099n\u0012\u0083\u00c0\n)@&\u0006\u0081\u0095C\u008b\u00e4?\u008bl\u00e7\u00fb\u00a91!\u00c0\u0094\u0018\u0004V\u000e-,@X9\u00b4\u00c8v\u00be\u00eb?\u00d8\u00a3p=\n\u00d7%\u00c0~?5^\u00baI(@H\u00e1z\u0014\u00aeG\u0001\u00c0\u000f-\u00b2\u009d\u00ef'\u001f\u00c0\u00a0\u001a/\u00dd$F+@\u00aeG\u00e1z\u0014\u00ae\u00f1\u00bf?5^\u00baI\f\u001e\u00c0+\u0087\u0016\u00d9\u00ce\u00b7-@%\u0006\u0081\u0095C\u008b\u00f8\u00bf\u00fb~j\u00bct\u0093\u001f\u00c0&\u0006\u0081\u0095C\u008b/@\u0085\u00ebQ\u00b8\u001e\u0085\u00f1\u00bf\u009a\u0099\u0099\u0099\u0099\u0099\u001c\u00c0\u000e-\u00b2\u009d\u00efg)@z\u00e9&1\b\u00ac\u0000\u00c0v\u0093\u0018\u0004V\u000e\u001a\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\f+@:\u00b4\u00c8v\u00be\u009f\b\u00c0\u00d3Mb\u0010X9\u001c\u00c0\"\u00b0rh\u0091\u00ad&@\u00ac\u001cZd;\u00df\u0001\u00c0I\u00e1z\u0014\u00aeG\u001e\u00c0\u00c5 \u00b0rh\u0091%@\u009a\u0099\u0099\u0099\u0099\u0099\u00f7\u00bf,\u0087\u0016\u00d9\u00cew\u001b\u00c0i\u0091\u00ed|?\u00b5-@\u008bl\u00e7\u00fb\u00a9\u00f1\u0005\u00c0\u00d0\u00f7S\u00e3\u00a5\u001b\u001b\u00c0\u0099n\u0012\u0083\u00c0J/@\u00e2z\u0014\u00aeG\u00e1\n\u00c0G\u00b6\u00f3\u00fd\u00d4x\u0017\u00c0\f\u0002+\u0087\u0016\u0019'@;\u00dfO\u008d\u0097n\u0011\u00c0\u00a8\u00c6K7\u0089A\u0015\u00c0\u00c7K7\u0089A`&@\u00f2\u00d2Mb\u0010\u00d8\u0014\u00c0\u00cd\u00cc\u00cc\u00cc\u00ccL\u0017\u00c0\u00c7K7\u0089A\u00e0)@th\u0091\u00ed|\u00bf\u0010\u00c0\u00d3Mb\u0010X\u00b9\u0015\u00c0\u00e6\u00d0\"\u00db\u00f9>+@h\u0091\u00ed|?\u00b5\u0013\u00c0c\u0010X9\u00b4\u00c8\u0019\u00c0\"\u00b0rh\u0091m%@7\u0089A`\u00e5\u00d0\n\u00c0`\u00e5\u00d0\"\u00dby\u0019\u00c0\u0085\u00ebQ\u00b8\u001eE#@\u001eZd;\u00dfO\u000b\u00c0\u0012\u0083\u00c0\u00ca\u00a1\u0085$\u00c0B`\u00e5\u00d0\"[%@\u001f\u0085\u00ebQ\u00b8\u001e\u00e5\u00bf\u008bl\u00e7\u00fb\u00a9\u00b1#\u00c0\u0091\u00ed|?5\u00de$@\u0019\u0004V\u000e-\u00b2\u00cd?\b\u00ac\u001cZd\u00fb$\u00c0\u0086\u00ebQ\u00b8\u001e\u0005#@\u0094\u0018\u0004V\u000e-\u00f8\u00bf\u00e9&1\b\u00ac\u009c#\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u00d3\"@w\u00be\u009f\u001a/\u00dd\u0002\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0'\u00c0\u0093\u0018\u0004V\u000e\u00ed\"@\u00e9&1\b\u00ac\u001c\u0001\u00c0U\u00e3\u00a5\u009b\u00c4`$\u00c09\u00b4\u00c8v\u00be\u009f @\u000e-\u00b2\u009d\u00ef\u00a7\u00e2\u00bf\u00f1\u00a7\u00c6K7\u0089%\u00c08\u0089A`\u00e5\u00d0\u001d@\u009b\u0099\u0099\u0099\u0099\u0099\u00ed\u00bf\u00edQ\u00b8\u001e\u0085+%\u00c0\u00d7\u00a3p=\n\u0017!@B`\u00e5\u00d0\"\u00db\u00d9?&\u0006\u0081\u0095C\u000b(\u00c0\u008e\u0097n\u0012\u0083\u0080\"@[d;\u00dfO\u008d\n\u00c0\u0085\u00ebQ\u00b8\u001eE!\u00c0\\\u008f\u00c2\u00f5(\u00dc\u001f@\u00f0\u00a7\u00c6K7\u0089\u00d9\u00bf\u00d1\"\u00db\u00f9~* \u00c0\u00b8\u001e\u0085\u00ebQ\u00b8!@*\\\u008f\u00c2\u00f5(\u00bc\u00bf\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd \u00c0~?5^\u00ba\u00c9\u001b@P\u008d\u0097n\u0012\u0083\u00e8?\u00d5x\u00e9&1\u0088!\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0017@\u0011X9\u00b4\u00c8v\u00de?\u00b7\u00f3\u00fd\u00d4xi\u001d\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u00cc\u001b@\u00a2E\u00b6\u00f3\u00fd\u00d4\u00f0?\b\u00ac\u001cZd\u00bb!\u00c0J\f\u0002+\u0087\u0016\u001d@\u00e0O\u008d\u0097n\u0012\u00fb? \u0085\u00ebQ\u00b8\u009e\u001f\u00c0=\n\u00d7\u00a3p=\u001d@\u001dZd;\u00dfO\u00f9\u00bfB`\u00e5\u00d0\"[\u001b\u00c0\u00a0\u001a/\u00dd$\u0006\u001e@B`\u00e5\u00d0\"\u00db\u00f7\u00bfz\u00e9&1\b\u00ac \u00c0\u0080j\u00bct\u0093\u0018\u001f@\u008e\u0097n\u0012\u0083\u00c0\u0003\u00c0m\u00e7\u00fb\u00a9\u00f1\u0012 \u00c0\u0082\u0095C\u008bl\u00e7\u0018@\u0015\u00aeG\u00e1z\u0014\u00fa\u00bf\u0084\u00c0\u00ca\u00a1E\u00b6)\u00c0sh\u0091\u00ed|\u007f#@J\f\u0002+\u0087\u0016\u00f5\u00bfx\u00be\u009f\u001a/])\u00c0\u00a4p=\n\u00d7\u00a3#@\u00cb\u00a1E\u00b6\u00f3\u00fd\u00d4\u00bf\u0010X9\u00b4\u00c8v,\u00c0\u00cd\u00cc\u00cc\u00cc\u00ccL#@\u0086\u00ebQ\u00b8\u001e\u0085\u00fb\u00bf8\u0089A`\u00e5\u0090,\u00c0\u00c3\u00f5(\\\u008fB!@\u0002+\u0087\u0016\u00d9\u00ce\u0000\u00c0\u00f7(\\\u008f\u00c2\u00f5,\u00c0\u00bct\u0093\u0018\u0004V%@H\u00e1z\u0014\u00aeG\u0007\u00c0#\u00db\u00f9~j<.\u00c0fffff\u00a6#@z\u00e9&1\b\u00ac\u00e0\u00bf%\u0006\u0081\u0095C\u008b-\u00c0\u00a2E\u00b6\u00f3\u00fd\u0014%@%\u0006\u0081\u0095C\u008b\u00cc?\u00fd\u00a9\u00f1\u00d2M\".\u00c09\u00b4\u00c8v\u00be\u009f$@\u00d9\u00ce\u00f7S\u00e3\u00a5\u000f\u00c0\u00e3\u00a5\u009b\u00c4 \u00900\u00c09\u00b4\u00c8v\u00be_$@\u0018\u00d9\u00ce\u00f7S\u00e3\u00e9\u00bf\u0098n\u0012\u0083\u00c0\u00aa0\u00c0\u00e3\u00a5\u009b\u00c4 0&@Nb\u0010X9\u00b4\u00f6\u00bffffff\u00061\u00c0\u008f\u00c2\u00f5(\\\u00cf\"@\u00fc\u00a9\u00f1\u00d2Mb\u00f6\u00bf\u00a4p=\n\u00d7\u00031\u00c0H\u00e1z\u0014\u00ae\u00c7$@\u001f\u0085\u00ebQ\u00b8\u001e\u00c5?\u00ad\u001cZd;\u009f.\u00c0j\u00bct\u0093\u0018\u0004!@\u00d6x\u00e9&1\b\u00cc?\u009c\u00c4 \u00b0r\u00a8,\u00c0\u00b6\u00f3\u00fd\u00d4x) @/\u00dd$\u0006\u0081\u0095\u00db?`\u00e5\u00d0\"\u00db\u00b9/\u00c0j\u00bct\u0093\u0018D!@\u0091\u00ed|?5^\u00f2?n\u00e7\u00fb\u00a9\u00f1\u00d2/\u00c0q=\n\u00d7\u00a3p\u001f@-\u00b2\u009d\u00ef\u00a7\u00c6\u00db\u00bf-\u00b2\u009d\u00ef\u00a7\u0006,\u00c0\u00d7\u00a3p=\n\u00d7'@\u0002+\u0087\u0016\u00d9\u00ce\u0005\u00c0y\u00e9&1\b\u00ec*\u00c02\b\u00ac\u001cZ$(@h\u0091\u00ed|?5\u00fe\u00bf\b\u00ac\u001cZd;,\u00c0\u00fa~j\u00bct\u0013*@\u00e8\u00fb\u00a9\u00f1\u00d2M\r\u00c0\u0090\u00c2\u00f5(\\O.\u00c0\u0013\u0083\u00c0\u00ca\u00a1\u0085*@\u001dZd;\u00dfO\u000f\u00c0\u0094\u0018\u0004V\u000e\u00ed*\u00c0\u00a4p=\n\u00d7c)@th\u0091\u00ed|?\u0014\u00c0\u00b7\u00f3\u00fd\u00d4x\u00e9*\u00c0c\u0010X9\u00b4\u0088,@\u0099n\u0012\u0083\u00c0\u00ca\u0007\u00c0\u00a5p=\n\u00d7\u00e3(\u00c0\u0014\u00aeG\u00e1z\u0014,@\u00e0O\u008d\u0097n\u0012\u0005\u00c0_\u00baI\f\u0002\u00eb*\u00c0\u0013\u0083\u00c0\u00ca\u00a1E.@\u0080j\u00bct\u0093\u0018\r\u00c0\u00ef|?5^\u00fa+\u00c0\u00ac\u001cZd;\u001f*@n\u00e7\u00fb\u00a9\u00f1R\u0018\u00c0\u00be\u009f\u001a/\u00dd\u00a4,\u00c0\u008aA`\u00e5\u00d0b-@\u00dc\u00f9~j\u00bct\u00fd\u00bf\u009c\u00c4 \u00b0rh,\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6+@\u0083\u00c0\u00ca\u00a1E\u00b6\u00f1\u00bf0\u00dd$\u0006\u0081\u00d5+\u00c0\u001eZd;\u00df\u000f/@&\u0006\u0081\u0095C\u008b\u00f4\u00bfe;\u00dfO\u008d\u0097/\u00c0H\u00e1z\u0014\u00ae\u0007.@\u00da\u00ce\u00f7S\u00e3\u00a5\u0001\u00c0\u00c8K7\u0089A\u00a0/\u00c0\u00ce\u00cc\u00cc\u00cc\u00cc\u008c/@\f\u0002+\u0087\u0016\u00d9\u0007\u00c0p\u0012\u0083\u00c0\u00caa0\u00c0m\u00e7\u00fb\u00a9\u00f1R,@\u00f4\u00fd\u00d4x\u00e9&\u0004\u00c0L7\u0089A`\u00850\u00c0<\u00dfO\u008d\u0097\u00ae.@7\u0089A`\u00e5\u00d0\u00ee\u00bf\u0088\u0016\u00d9\u00ce\u00f7\u00d3/\u00c0\u0014\u00aeG\u00e1z\u00140@\u00cc\u00a1E\u00b6\u00f3\u00fd\u00dc\u00bfR\u00b8\u001e\u0085\u00eb\u00b10\u00c0\u009d\u00c4 \u00b0r\u00e8,@\u00c1\u00ca\u00a1E\u00b6\u00f3\u00d5\u00bfZd;\u00dfO\u00cd1\u00c0\u00baI\f\u0002+\u00c7/@-\u00b2\u009d\u00ef\u00a7\u00c6\u00f5\u00bf\u0014\u00aeG\u00e1z42\u00c0;\u00dfO\u008d\u0097.0@^\u00baI\f\u0002+\u00df\u00bf\u009a\u0099\u0099\u0099\u0099y2\u00c0\u0001\u0000\u0000\u0000\u0000\u0080.@\u00e8\u00fb\u00a9\u00f1\u00d2M\u00fc\u00bfd;\u00dfO\u008d\u00b71\u00c0\u0006\u0081\u0095C\u008b\u00ac0@\u0096C\u008bl\u00e7\u00fb\u00ff\u00bf\u008e\u0097n\u0012\u0083\u00c0(\u00c0\u00a4p=\n\u00d7\u00e3'@^\u00baI\f\u0002+\u0014\u00c0E\u008bl\u00e7\u00fb\u00e9'\u00c0\u00dc\u00f9~j\u00bct'@\u00aa\u00f1\u00d2Mb\u0090\u0010\u00c0H\u00e1z\u0014\u00aeG'\u00c0h\u0091\u00ed|?5'@\u00fa~j\u00bct\u0013\u0019\u00c0\u001b/\u00dd$\u0006\u0081'\u00c0.\u00b2\u009d\u00ef\u00a7\u00c6(@\u00baI\f\u0002+\u0007\u001c\u00c0\u00ab\u00f1\u00d2Mb\u0090(\u00c0fffff\u00a6$@~?5^\u00ba\u00c9\u001b\u00c0b\u0010X9\u00b4H$\u00c0\u0091\u00ed|?5\u00de&@L7\u0089A`\u00e5\u0017\u00c0\u0014\u00aeG\u00e1z\u00d4#\u00c0/\u00dd$\u0006\u0081U%@\u00a6\u009b\u00c4 \u00b0\u00f2\u0014\u00c0\u008d\u0097n\u0012\u0083\u0080#\u00c0m\u00e7\u00fb\u00a9\u00f1\u0012&@)\\\u008f\u00c2\u00f5\u00a8\u001b\u00c0\u00cd\u00cc\u00cc\u00cc\u00ccL'\u00c0\u00baI\f\u0002+\u0087#@\u00f7(\\\u008f\u00c2u\u001f\u00c0\u00fc\u00a9\u00f1\u00d2Mb\"\u00c0L7\u0089A`%)@!\u00b0rh\u0091\u00ed\u0015\u00c0\u00d7\u00a3p=\nW!\u00c0M7\u0089A`e(@\u009c\u00c4 \u00b0rh\u0012\u00c0\u00bct\u0093\u0018\u0004\u00d6 \u00c0\u00a4p=\n\u00d7c)@\u00a6\u009b\u00c4 \u00b0\u00f2\u0018\u00c0\u0087\u0016\u00d9\u00ce\u00f7\u0093#\u00c0gffff\u00a6+@\u00e1z\u0014\u00aeG\u00e1\u0013\u00c07\u0089A`\u00e5P#\u00c00\u00dd$\u0006\u0081U,@\u00ac\u001cZd;\u00df\r\u00c0\u008f\u00c2\u00f5(\\O\"\u00c0\u00a2E\u00b6\u00f3\u00fd\u0014+@?5^\u00baI\f\t\u00c0u\u0093\u0018\u0004V\u008e$\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2\u00cd-@\u0012\u0083\u00c0\u00ca\u00a1E\u000b\u00c05^\u00baI\fB%\u00c0\u00c5 \u00b0rh\u00d1,@\u00b0rh\u0091\u00ed|\u0016\u00c0\u00d0\u00f7S\u00e3\u00a5\u00db*\u00c0J\f\u0002+\u0087\u0096#@fffff\u00e6\u0019\u00c0\u00fe\u00d4x\u00e9&\u00f1+\u00c0 \u0085\u00ebQ\u00b8\u009e$@D\u008bl\u00e7\u00fb)\u0017\u00c07\u0089A`\u00e5\u0010,\u00c0\u0006\u0081\u0095C\u008b\u00ec @;\u00dfO\u008d\u0097n\u001b\u00c0\u009f\u00ef\u00a7\u00c6K\u00b7-\u00c0sh\u0091\u00ed|\u007f @\u009f\u00ef\u00a7\u00c6K\u00b7\u0018\u00c0\u0013\u0083\u00c0\u00ca\u00a1E*\u00c0\u0097C\u008bl\u00e7\u00fb\u001c@e;\u00dfO\u008d\u0097\u001a\u00c0\u00b4\u00c8v\u00be\u009f\u001a-\u00c0\u0083\u00c0\u00ca\u00a1E6!@9\u00b4\u00c8v\u00be\u009f \u00c0.\u00b2\u009d\u00ef\u00a7\u0086-\u00c0\u0000\u0000\u0000\u0000\u0000@#@5^\u00baI\fB!\u00c0E\u008bl\u00e7\u00fb\u00a9+\u00c0\u00b2\u009d\u00ef\u00a7\u00c6\u008b @w\u00be\u009f\u001a/\u001d\"\u00c0\u0086\u00ebQ\u00b8\u001e\u0085*\u00c0X9\u00b4\u00c8v>\u0019@\u00b8\u001e\u0085\u00ebQ\u00b8\u001d\u00c0[d;\u00dfO\u008d/\u00c0\u0010X9\u00b4\u00c8\u00f6\u001e@;\u00dfO\u008d\u0097.!\u00c0-\u00b2\u009d\u00ef\u00a7\u00860\u00c0\u00c5 \u00b0rh\u0011\u001f@433333\u001f\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u00cc.\u00c0x\u00be\u009f\u001a/\u00dd\u001a@\u00e9&1\b\u00ac\u001c!\u00c0\u0096C\u008bl\u00e7{0\u00c0)\\\u008f\u00c2\u00f5(\u001f@\u00d0\u00f7S\u00e3\u00a5\u00db#\u00c0|\u0014\u00aeG\u00e1z1\u00c0\u0006\u0081\u0095C\u008bl\u001d@\u00d1\"\u00db\u00f9~\u00aa#\u00c0\u0012\u0083\u00c0\u00ca\u00a1\u00a50\u00c0)\\\u008f\u00c2\u00f5\u00a8!@\\\u008f\u00c2\u00f5(\\$\u00c0\u00d5x\u00e9&1\u0088/\u00c0\u00b7\u00f3\u00fd\u00d4xi\u001c@sh\u0091\u00ed|\u00ff%\u00c0\u00b6\u00f3\u00fd\u00d4x\t0\u00c0d;\u00dfO\u008d\u0097\u0018@)\\\u008f\u00c2\u00f5h&\u00c0\u00c6 \u00b0rh\u0011-\u00c0\u00db\u00f9~j\u00bc\u00b4!@/\u00dd$\u0006\u0081\u0095'\u00c0\u00bbI\f\u0002+\u0007.\u00c0\u00a4p=\n\u00d7##@%\u0006\u0081\u0095C\u008b&\u00c0\u00e2z\u0014\u00aeG\u00e1+\u00c01\b\u00ac\u001cZ$\"@\u00ecQ\u00b8\u001e\u0085+)\u00c0\u008d\u0097n\u0012\u0083\u0000-\u00c0\u00f9S\u00e3\u00a5\u009bD\u001c@p\u0012\u0083\u00c0\u00ca\u00e1)\u00c0\u0084\u00c0\u00ca\u00a1E6,\u00c0D\u008bl\u00e7\u00fb\u00a9\u001e@R\u00b8\u001e\u0085\u00ebQ+\u00c0\u00b1rh\u0091\u00ed|-\u00c0Zd;\u00dfO\u008d\u0018@X9\u00b4\u00c8v~*\u00c0E\u008bl\u00e7\u00fb\u00e9-\u00c0\u00f0\u00a7\u00c6K7\u0089\u001e@\u00d4Mb\u0010X\u00b9'\u00c0x\u00be\u009f\u001a/\u009d(\u00c0\u0010X9\u00b4\u00c8\u00f6\u001c@\u0096C\u008bl\u00e7{\u0016\u00c05^\u00baI\f\u00c2(\u00c0R\u00b8\u001e\u0085\u00eb\u0011 @5^\u00baI\f\u0002\u0014\u00c0=\n\u00d7\u00a3p='\u00c0|\u0014\u00aeG\u00e1z\u0018@L7\u0089A`e\u0014\u00c0H\u00e1z\u0014\u00ae\u00c7(\u00c0\u00a0\u001a/\u00dd$\u0086\u0015@\u00c7K7\u0089A`\u0013\u00c0L7\u0089A`\u00e5%\u00c0r=\n\u00d7\u00a3p\u0019@\u009a\u0099\u0099\u0099\u0099\u0019\u0011\u00c0\u00fd\u00a9\u00f1\u00d2Mb%\u00c0u\u0093\u0018\u0004V\u008e\u0015@\u00cav\u00be\u009f\u001a\u00af\u0018\u00c0\u00c2\u00ca\u00a1E\u00b63$\u00c0\\\u008f\u00c2\u00f5(\u00dc\u0017@\u0098n\u0012\u0083\u00c0J\u001c\u00c0p\u0012\u0083\u00c0\u00caa%\u00c0D\u008bl\u00e7\u00fb)\u0010@\u0018\u00d9\u00ce\u00f7Sc\u0018\u00c0\u00a4p=\n\u00d7\u00e3&\u00c0?5^\u00baI\f\r@\u00b2\u009d\u00ef\u00a7\u00c6K\u0016\u00c0\u0082\u0095C\u008bl\u00e7#\u00c0\u00c8K7\u0089A`\t@\u00b8\u001e\u0085\u00ebQ8\u001c\u00c0\u00e4\u00a5\u009b\u00c4 \u00f0!\u00c0\u009e\u00ef\u00a7\u00c6K7\r@\u00e3\u00a5\u009b\u00c4 0\u001c\u00c0\u00a0\u001a/\u00dd$\u0006%\u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\t@y\u00e9&1\b\u00ec \u00c0\u00fc\u00a9\u00f1\u00d2M\u00a2#\u00c0\u00d3Mb\u0010X9\u00fc?\u0002+\u0087\u0016\u00d9\u00ce\u0019\u00c0\u00aa\u00f1\u00d2MbP\"\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u00f4?}?5^\u00ba\u00c9\u001c\u00c0\u00ac\u001cZd;\u009f%\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u00f5?(1\b\u00ac\u001c\u00da\u0019\u00c0X9\u00b4\u00c8v~#\u00c0j\u00bct\u0093\u0018\u0004\n@(1\b\u00ac\u001c\u00da\"\u00c0\u0093\u0018\u0004V\u000e-\"\u00c0v\u0093\u0018\u0004V\u000e\u00f9?!\u00b0rh\u0091m\u0014\u00c0^\u00baI\f\u0002+#\u00c0:\u00b4\u00c8v\u00be\u009f\u00f2?\u00a9\u00c6K7\u0089A\u000f\u00c0\u00bbI\f\u0002+G%\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5\u00ef?\u00bct\u0093\u0018\u0004V\u000e\u00c0\u00a1\u001a/\u00dd$\u0086\u001e\u00c0\b\u00ac\u001cZd;\u00fd?333333\u0013\u00c0|\u0014\u00aeG\u00e1z\u001d\u00c0|\u0014\u00aeG\u00e1z\u00f8?\u00b2\u009d\u00ef\u00a7\u00c6K\u000b\u00c0z\u00e9&1\b,\u001a\u00c0Zd;\u00dfO\u008d\u0002@y\u00e9&1\b,\u0016\u00c0\u00d8\u00a3p=\n\u00d7\u001a\u00c0\u0087\u0016\u00d9\u00ce\u00f7S\u0005@\u0083\u00c0\u00ca\u00a1E6\u001a\u00c0L7\u0089A`%!\u00c0\u007fj\u00bct\u0093\u0018\u00f2?ffffff\u0007\u00c0#\u00db\u00f9~j|!\u00c0 \u0085\u00ebQ\u00b8\u001e\u00ed?\u00cav\u00be\u009f\u001a/\u00ff\u00bf|\u0014\u00aeG\u00e1\u00fa\u0013\u00c01\b\u00ac\u001cZd\u0000@V\u000e-\u00b2\u009d\u00ef\f\u00c0\u009e\u00ef\u00a7\u00c6K7\u0010\u00c0333333\u0002@h\u0091\u00ed|?5\t\u00c0I\u00e1z\u0014\u00aeG\u0018\u00c0I\u00e1z\u0014\u00aeG\u00f9?\u00be\u009f\u001a/\u00dd$\u0007\u00c0\u009c\u00c4 \u00b0r\u00e8\u0017\u00c0\u001f\u0085\u00ebQ\u00b8\u001e\u00f3?)\\\u008f\u00c2\u00f5(\u00fe\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u00c0u\u0093\u0018\u0004V\u000e\u0003@\u00d5x\u00e9&1\b\u0014\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\u0011\u00c0\u00ecQ\u00b8\u001e\u0085\u00eb\u0006@\u0092\u00ed|?5^\u0016\u00c0\u007fj\u00bct\u0093\u0098'\u00c0\u007fj\u00bct\u0093\u0018\u000b@\u00f4\u00fd\u00d4x\u00e9f!\u00c0,\u0087\u0016\u00d9\u00ce\u00f7(\u00c0w\u00be\u009f\u001a/\u00dd\f@G\u00b6\u00f3\u00fd\u00d4\u00f8\u001f\u00c0\u00a6\u009b\u00c4 \u00b0\u00f2(\u00c0\u00d3Mb\u0010X9\f@\u0099n\u0012\u0083\u00c0\n$\u00c0:\u00b4\u00c8v\u00be\u009f(\u00c0\u00a6\u009b\u00c4 \u00b0r\u0005@\u00ac\u001cZd;_%\u00c0\u00b0rh\u0091\u00ed\u00fc'\u00c0\u0093\u0018\u0004V\u000e-\u0013@E\u008bl\u00e7\u00fbi%\u00c0&\u0006\u0081\u0095C\u000b,\u00c0S\u00b8\u001e\u0085\u00ebQ\r@\u00e3\u00a5\u009b\u00c4 p#\u00c0Nb\u0010X9t,\u00c0\u000e-\u00b2\u009d\u00ef\u00a7\u0011@\u00d1\"\u00db\u00f9~\u00ea!\u00c0\u00f4\u00fd\u00d4x\u00e9\u00a6,\u00c0/\u00dd$\u0006\u0081\u0095\u0005@\u00c7K7\u0089A\u00a0\"\u00c0\u00e6\u00d0\"\u00db\u00f9~'\u00c0\u00a4p=\n\u00d7#\u0013@Zd;\u00dfO\u00cd'\u00c0r=\n\u00d7\u00a3\u00b0-\u00c0\u00dc\u00f9~j\u00bct\u000e@$\u00db\u00f9~j\u00fc%\u00c0\u0019\u0004V\u000e-\u00b2,\u00c0v\u0093\u0018\u0004V\u000e\u000b@\u0080j\u00bct\u0093\u0018(\u00c0\u009b\u0099\u0099\u0099\u0099\u00d9/\u00c0y\u00e9&1\b\u00ac\u0011@\u00d5x\u00e9&1\u00c8%\u00c0/\u00dd$\u0006\u0081\u0095'\u00c0\u00e0O\u008d\u0097n\u0092\u0017@\u0091\u00ed|?5\u00de#\u00c0~?5^\u00ba\t(\u00c0\\\u008f\u00c2\u00f5(\\\u0017@\u009c\u00c4 \u00b0r\u00e8!\u00c0\u00e0O\u008d\u0097nR&\u00c0\u00da\u00ce\u00f7S\u00e3\u00a5\u001c@J\f\u0002+\u0087\u00d6$\u00c0sh\u0091\u00ed|?'\u00c0\u009f\u00ef\u00a7\u00c6K\u00b7\u001d@th\u0091\u00ed|\u00bf&\u00c0<\u00dfO\u008d\u0097\u00ee&\u00c0\u00e6\u00d0\"\u00db\u00f9\u00fe\u001f@7\u0089A`\u00e5\u0090#\u00c0=\n\u00d7\u00a3p=#\u00c0th\u0091\u00ed|\u00bf\u001c@+\u0087\u0016\u00d9\u00ce\u00b7$\u00c0\u0093\u0018\u0004V\u000e-\"\u00c0\u008e\u0097n\u0012\u0083\u00c0\u001f@\u00e3\u00a5\u009b\u00c4 p&\u00c0\u00ea&1\b\u00ac\u00dc!\u00c0\u00f8S\u00e3\u00a5\u009bD\u0019@\u001f\u0085\u00ebQ\u00b8\u001e#\u00c0#\u00db\u00f9~j\u00bc\"\u00c0\u0010X9\u00b4\u00c8v\u0016@\u009e\u00ef\u00a7\u00c6K\u00f7!\u00c0\u00d1\"\u00db\u00f9~\u00ea\u001d\u00c0\u00e3\u00a5\u009b\u00c4 \u00b0\u0018@\u00fe\u00d4x\u00e9&q#\u00c0=\n\u00d7\u00a3p=\u001c\u00c0\u00d4Mb\u0010X\u00b9\u001c@\u00f4\u00fd\u00d4x\u00e9f#\u00c0\u001dZd;\u00df\u00cf\u001c\u00c0.\u00b2\u009d\u00ef\u00a7F\u0016@\u00aeG\u00e1z\u0014.&\u00c0\b\u00ac\u001cZd\u00bb\u001b\u00c0&\u0006\u0081\u0095C\u008b\u0015@!\u00b0rh\u0091\u00ed \u00c06^\u00baI\f\u0002\u001c\u00c0\u00ef|?5^:\u0018@\u00c2\u00ca\u00a1E\u00b6s\u001e\u00c0\u00bct\u0093\u0018\u0004\u00d6\u001d\u00c0\u00a8\u00c6K7\u0089\u00c1\u0011@\u0083\u00c0\u00ca\u00a1E\u00b6 \u00c0\u00f9S\u00e3\u00a5\u009b\u00c4\u0018\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\u0017@\u001b/\u00dd$\u0006\u0081'\u00c0\u0098n\u0012\u0083\u00c0\u00ca\u0015\u00c0\u00dd$\u0006\u0081\u0095\u00c3\u0013@\u00d7\u00a3p=\n\u0017!\u00c0T\u00e3\u00a5\u009b\u00c4 \u0012\u00c0_\u00baI\f\u0002+\u0018@T\u00e3\u00a5\u009b\u00c4 !\u00c0?5^\u00baI\u008c\u0013\u00c0\u00b8\u001e\u0085\u00ebQ8\u001c@\u00be\u009f\u001a/\u00dd\u00e4 \u00c0\u00d4Mb\u0010X9\u0014\u00c0X9\u00b4\u00c8v\u00be\f@|\u0014\u00aeG\u00e1z!\u00c0\u00dfO\u008d\u0097n\u0012\u0017\u00c0\u00dd$\u0006\u0081\u0095C\u0006@d;\u00dfO\u008d\u0097!\u00c0333333\t\u00c0\u00bdt\u0093\u0018\u0004V\u0017@Zd;\u00dfO\u008d!\u00c0H\u00e1z\u0014\u00aeG\u0003\u00c0,\u0087\u0016\u00d9\u00cew\u001a@u\u0093\u0018\u0004V\u00ce!\u00c0\u008f\u00c2\u00f5(\\\u008f\r\u00c0\u00b0rh\u0091\u00ed|\u000b@\u0098n\u0012\u0083\u00c0\n\"\u00c0\u0004V\u000e-\u00b2\u009d\n\u00c0ffffff\u0003@\u0098n\u0012\u0083\u00c0J\"\u00c0\u00db\u00f9~j\u00bct\u0006\u00c0\u00d5x\u00e9&1\b\u0012@\u00c5 \u00b0rh\u0011\"\u00c0\u00be\u009f\u001a/\u00dd$\u00fc\u00bf$\u00db\u00f9~j<\u0011@B`\u00e5\u00d0\"[\"\u00c0H\u00e1z\u0014\u00ae\u0007 \u00c0\u0087\u0016\u00d9\u00ce\u00f7S\u0012@\u007fj\u00bct\u0093\u0018'\u00c0\u00ecQ\u00b8\u001e\u0085\u00ab!\u00c0\u00a2E\u00b6\u00f3\u00fdT\u0011@Zd;\u00dfO\r&\u00c0\u0080j\u00bct\u0093\u0098\u001f\u00c0\u00be\u009f\u001a/\u00dd$\u0010@G\u00b6\u00f3\u00fd\u00d4\u00b8)\u00c0\u001eZd;\u00dfO\u001b\u00c0\u00c6 \u00b0rh\u0091\u000f@B`\u00e5\u00d0\"\u001b*\u00c0\u00d3Mb\u0010X\u00f9 \u00c00\u00dd$\u0006\u0081\u0095\u0013@\u00aa\u00f1\u00d2Mb\u0010,\u00c0\u00ecQ\u00b8\u001e\u0085\u00ab \u00c0{\u0014\u00aeG\u00e1z\u0004@~?5^\u00ba\u00c9)\u00c0\u00f0\u00a7\u00c6K7\t \u00c08\u0089A`\u00e5\u00d0\u0001@P\u008d\u0097n\u0012\u00c3+\u00c0\b\u00ac\u001cZd{ \u00c0\u00c9v\u00be\u009f\u001a/\u0012@\u009a\u0099\u0099\u0099\u0099Y.\u00c0\u0092\u00ed|?5\u00de\u001e\u00c0\u0084\u00c0\u00ca\u00a1E\u00b6\u00fb?v\u0093\u0018\u0004V\u008e'\u00c00\u00dd$\u0006\u0081\u0095\u001a\u00c0\u009e\u00ef\u00a7\u00c6K7\u00f9?\u001f\u0085\u00ebQ\u00b8\u00de'\u00c0\u00c9v\u00be\u009f\u001a\u00af\u001f\u00c0w\u00be\u009f\u001a/\u00dd\u0001@L7\u0089A`\u00a5%\u00c0\u00fc\u00a9\u00f1\u00d2Mb \u00c0*\\\u008f\u00c2\u00f5(\u00e8?`\u00e5\u00d0\"\u00dby'\u00c0\u00d9\u00ce\u00f7S\u00e3\u00a5#\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\u0003@0\u00dd$\u0006\u0081\u00d5)\u00c0\u00fe\u00d4x\u00e9&q$\u00c0\u009c\u00c4 \u00b0rh\u0007@\u00de$\u0006\u0081\u0095\u0003(\u00c0\u00e7\u00fb\u00a9\u00f1\u00d2M$\u00c0\u00b6\u00f3\u00fd\u00d4x\u00e9\u00f6?>\n\u00d7\u00a3p\u00fd)\u00c0R\u00b8\u001e\u0085\u00ebQ$\u00c0\b\u00ac\u001cZd;\b@/\u00dd$\u0006\u0081\u0095+\u00c0^\u00baI\f\u0002k\"\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u0017@\u0018\u00d9\u00ce\u00f7Sc+\u00c0V\u000e-\u00b2\u009do\"\u00c0\u00db\u00f9~j\u00bc\u00f4\u0018@!\u00b0rh\u0091m)\u00c0\u0086\u00ebQ\u00b8\u001e\u0005#\u00c0\u0082\u0095C\u008blg\u001c@\u0001\u0000\u0000\u0000\u0000@-\u00c0~?5^\u00ba\u0089#\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u001a@\u00a9\u00c6K7\u0089A/\u00c0\u00c5 \u00b0rh\u00d1 \u00c0433333 @S\u00b8\u001e\u0085\u00eb\u0091-\u00c0\u009a\u0099\u0099\u0099\u0099\u0099%\u00c0\u0019\u0004V\u000e-2\u001f@\u00da\u00ce\u00f7S\u00e3e,\u00c0\u0010X9\u00b4\u00c86%\u00c0\u008d\u0097n\u0012\u0083\u0000!@~?5^\u00ba\u00c9*\u00c0\u00b4\u00c8v\u00be\u009f\u001a'\u00c07\u0089A`\u00e5P\u001c@\u00e5\u00d0\"\u00db\u00f9\u00be+\u00c0\u0096C\u008bl\u00e7; \u00c0\u00c7K7\u0089A\u00e0 @\u00fc\u00a9\u00f1\u00d2M\u00e2/\u00c0\u00b5\u00c8v\u00be\u009f\u009a&\u00c0\u00a4p=\n\u00d7\u00e3 @\u00f4\u00fd\u00d4x\u00e9\u00e6.\u00c0\u0000\u0000\u0000\u0000\u0000@%\u00c0b\u0010X9\u00b4\u0088\"@<\u00dfO\u008d\u0097n/\u00c0$\u00db\u00f9~j<'\u00c0\u00e0O\u008d\u0097n\u0012\u001f@\u00e9&1\b\u00ac<0\u00c06^\u00baI\fB)\u00c01\b\u00ac\u001cZd\"@\u00b0rh\u0091\u00ed<.\u00c0v\u0093\u0018\u0004V\u000e*\u00c0\u00ecQ\u00b8\u001e\u0085\u00ab\"@x\u00be\u009f\u001a/\u00dd+\u00c0~?5^\u00ba\u00c9*\u00c0\u00f0\u00a7\u00c6K7I#@\u0012\u0083\u00c0\u00ca\u00a1\u00050\u00c0`\u00e5\u00d0\"\u00db\u00f9\u001e\u00c0\u00fa~j\u00bct\u00d3 @\u00f3\u00d2Mb\u0010X+\u00c0h\u0091\u00ed|?5 \u00c0\u00ecQ\u00b8\u001e\u0085\u00eb\u001f@*\\\u008f\u00c2\u00f5\u00a8)\u00c05^\u00baI\f\u0002\u001a\u00c09\u00b4\u00c8v\u00be_\"@^\u00baI\f\u0002++\u00c0\u00c6 \u00b0rh\u0091\u001a\u00c0\u0091\u00ed|?5^$@6^\u00baI\f\u0002,\u00c0\u00f0\u00a7\u00c6K7\t\u0015\u00c0\u000e-\u00b2\u009d\u00ef'!@E\u008bl\u00e7\u00fb\u00a9,\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0018\u00c0/\u00dd$\u0006\u0081\u00d5\"@z\u00e9&1\b,(\u00c0th\u0091\u00ed|?\u001a\u00c0\u008f\u00c2\u00f5(\\\u000f!@\u00e2z\u0014\u00aeG!'\u00c0;\u00dfO\u008d\u0097n\u001b\u00c0w\u00be\u009f\u001a/]$@\u00c6 \u00b0rhQ'\u00c0\u00f8S\u00e3\u00a5\u009bD\u0012\u00c0+\u0087\u0016\u00d9\u00ce\u00b7\"@\u00a6\u009b\u00c4 \u00b0\u00f2-\u00c0?5^\u00baI\f\u0013\u00c0\u00cd\u00cc\u00cc\u00cc\u00cc\u008c#@+\u0087\u0016\u00d9\u00cew'\u00c0\u00f2\u00d2Mb\u0010X\u0011\u00c0\u0094\u0018\u0004V\u000e-&@|\u0014\u00aeG\u00e1\u00ba'\u00c0\u00d7\u00a3p=\n\u00d7\u0013\u00c0\u00a8\u00c6K7\u0089\u00c1'@+\u0087\u0016\u00d9\u00cew(\u00c0@5^\u00baI\f\u000f\u00c0\u0082\u0095C\u008blg!@b\u0010X9\u00b4\u00c8&\u00c09\u00b4\u00c8v\u00be\u009f\u0010\u00c0\u001a\u0004V\u000e-\u00b2\u001e@\u0092\u00ed|?5^&\u00c0\u00ea&1\b\u00ac\u001c\b\u00c0\u00c3\u00f5(\\\u008f\u00c2&@\u00bct\u0093\u0018\u0004\u0016'\u00c0D\u008bl\u00e7\u00fb\u00a9\u0004\u00c0sh\u0091\u00ed|\u00bf(@\u00de$\u0006\u0081\u0095\u0003'\u00c0F\u00b6\u00f3\u00fd\u00d4x\u0004\u00c0J\f\u0002+\u0087\u0016\"@\u00b7\u00f3\u00fd\u00d4x)&\u00c0\u00d1\"\u00db\u00f9~j\u00fc\u00bf\u009c\u00c4 \u00b0r\u00a8 @b\u0010X9\u00b4\u00c8%\u00c0\u00b8\u001e\u0085\u00ebQ\u00b8\u0000\u00c0\u00f6(\\\u008f\u00c2\u00b5$@\u00f0\u00a7\u00c6K7I&\u00c0\u00b2\u009d\u00ef\u00a7\u00c6K\u00f1\u00bfB`\u00e5\u00d0\"[%@x\u00be\u009f\u001a/\u00dd%\u00c0\u00ecQ\u00b8\u001e\u0085\u00eb\u0014\u00c0u\u0093\u0018\u0004V\u000e\u001d@\u00b0rh\u0091\u00ed\u00bc,\u00c0\u00dfO\u008d\u0097n\u0012\u0017\u00c0\f\u0002+\u0087\u0016\u00d9\u001a@\u0082\u0095C\u008blg+\u00c0\u00a6\u009b\u00c4 \u00b0r\u0010\u00c0\u00d2\"\u00db\u00f9~j\u001a@&\u0006\u0081\u0095CK.\u00c0|\u0014\u00aeG\u00e1z\r\u00c0\u0084\u00c0\u00ca\u00a1E6\u001d@,\u0087\u0016\u00d9\u00ce\u00b7/\u00c0\u00d7\u00a3p=\nW\u0012\u00c0\"\u00b0rh\u0091m\u0015@\u00aeG\u00e1z\u0014\u00ee/\u00c0\u0003+\u0087\u0016\u00d9\u00ce\u0007\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d2\u0018@\u00e9&1\b\u00ac\\,\u00c0\u0012\u0083\u00c0\u00ca\u00a1E\u0006\u00c0\u00d3Mb\u0010X9\u001c@\u00cd\u00cc\u00cc\u00cc\u00cc\f+\u00c07\u0089A`\u00e5\u00d0\t\u00c0h\u0091\u00ed|?\u00b5\u0015@\u0006\u0081\u0095C\u008b\u00ec*\u00c0\u00ce\u00cc\u00cc\u00cc\u00ccL\u0015\u00c0\u00c2\u00ca\u00a1E\u00b6\u00f3\u0011@\u0019\u0004V\u000e-\u00f2.\u00c0v\u0093\u0018\u0004V\u000e\u00fb\u00bf\u008bl\u00e7\u00fb\u00a9\u00f1\u0016@M7\u0089A`\u00a5-\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u00f8\u00bf\u007fj\u00bct\u0093\u0098\u0011@6^\u00baI\f\u0082.\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0002\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\r@ \u0085\u00ebQ\u00b8^.\u00c0y\u00e9&1\b\u00ac\u00e4\u00bf\u00fe\u00d4x\u00e9&\u00b1\u001a@H\u00e1z\u0014\u00ae\u00c7-\u00c09\u00b4\u00c8v\u00be\u009f\u00e6\u00bf\u00d0\u00f7S\u00e3\u00a5\u009b\u001e@U\u00e3\u00a5\u009b\u00c4\u00e0,\u00c0\u009c\u00c4 \u00b0rh\u00d1\u00bf\u0000\u0000\u0000\u0000\u0000\u0000\u0010@#\u00db\u00f9~j|/\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2M\u00c2\u00bf/\u00dd$\u0006\u0081\u0095\u0007@\u00d8\u00a3p=\n\u00d7/\u00c0X9\u00b4\u00c8v\u00be\u00e3?\u0096C\u008bl\u00e7\u00fb\u0018@\u00ef|?5^\u00ba.\u00c0\u00d1\"\u00db\u00f9~j\u00f6?\u00b6\u00f3\u00fd\u00d4x\u00e9\u001b@\u00c7K7\u0089A\u00e0.\u00c0@5^\u00baI\f\u00ea?\u00a8\u00c6K7\u0089\u00c1\u0013@fffff\u00a6/\u00c0\u00e1z\u0014\u00aeG\u00e1\u00fc?/\u00dd$\u0006\u0081\u0095\u0012@\u00d9\u00ce\u00f7S\u00e3%0\u00c0;\u00dfO\u008d\u0097n\u0011\u00c0D\u008bl\u00e7\u00fb\u00a9\u0015@-\u00b2\u009d\u00ef\u00a7F1\u00c0o\u0012\u0083\u00c0\u00ca!\u0010\u00c0\u008aA`\u00e5\u00d0\"\u0019@\u008f\u00c2\u00f5(\\\u00af1\u00c0}?5^\u00ba\u00c9\u0013\u00c0\u00be\u009f\u001a/\u00dd\u00a4\u0011@\u00db\u00f9~j\u00bc42\u00c0\"\u00b0rh\u0091\u00ed\u0017\u00c0\u0002+\u0087\u0016\u00d9N\u0011@w\u00be\u009f\u001a/\u00dd1\u00c0\u009e\u00ef\u00a7\u00c6K\u00b7\u0010\u00c0\u00b1rh\u0091\u00ed|\b@\u00f2\u00d2Mb\u0010\u00182\u00c0\u00d7\u00a3p=\n\u00d7\u0013\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u0013@?5^\u00baI\u00ac3\u00c0\u0096C\u008bl\u00e7\u00fb\u0014\u00c0\u00baI\f\u0002+\u0007\u0018@\u008bl\u00e7\u00fb\u00a9\u00b13\u00c0\u00d2\"\u00db\u00f9~j\u000f\u00c0\u00cc\u00a1E\u00b6\u00f3}\u0013@1\b\u00ac\u001cZ\u00044\u00c0b\u0010X9\u00b4\u00c8\u0007\u00c0\f\u0002+\u0087\u0016\u00d9\b@\u0096C\u008bl\u00e7\u00db1\u00c0e;\u00dfO\u008d\u0017\u0017\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u0010@w\u00be\u009f\u001a/\u00bd4\u00c0\u00f5\u00fd\u00d4x\u00e9&\u001c\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\u0011@/\u00dd$\u0006\u0081\u00155\u00c0r=\n\u00d7\u00a3p\u001e\u00c0D\u008bl\u00e7\u00fb)\u0015@\u008e\u0097n\u0012\u0083\u00c04\u00c0\u008d\u0097n\u0012\u0083@\u0015\u00c0\u00cb\u00a1E\u00b6\u00f3\u00fd\b@d;\u00dfO\u008dw5\u00c0\u001f\u0085\u00ebQ\u00b8\u009e\u0011\u00c0\u00db\u00f9~j\u00bct\u0005@\u00f2\u00d2Mb\u0010x5\u00c0\u00e2z\u0014\u00aeGa\u0019\u00c0\u0002+\u0087\u0016\u00d9\u00ce\u0005@\u000e-\u00b2\u009d\u00efG6\u00c0I\u00e1z\u0014\u00aeG\u0019\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\u00fe?w\u00be\u009f\u001a/\u00fd6\u00c0\u0088\u0016\u00d9\u00ce\u00f7\u00d3\u001d\u00c0\u00e8\u00fb\u00a9\u00f1\u00d2M\f@\u00f2\u00d2Mb\u0010\u00186\u00c0\u00c6 \u00b0rh\u0091\u0013\u00c0K\f\u0002+\u0087\u0016\u00ff?H\u00e1z\u0014\u00aeg2\u00c0%\u0006\u0081\u0095C\u008b\u0017\u00c0ffffff\u0000@\u008bl\u00e7\u00fb\u00a9\u00912\u00c0\u00aeG\u00e1z\u0014.\u0011\u00c0\u0010X9\u00b4\u00c8v\u00e2?\u00baI\f\u0002+\u00872\u00c0\u00f2\u00d2Mb\u0010X\n\u00c0\u0014\u00aeG\u00e1z\u0014\u00e6?%\u0006\u0081\u0095C\u00eb2\u00c0\u00c7K7\u0089A\u00e0\u0014\u00c0H\u00e1z\u0014\u00aeG\u00c1\u00bf\u00f2\u00d2Mb\u0010\u00983\u00c0\u0081\u0095C\u008bl\u00e7\u0010\u00c0\u00f4\u00fd\u00d4x\u00e9&\u00d1\u00bf/\u00dd$\u0006\u008151\u00c0-\u00b2\u009d\u00ef\u00a7\u00c6\u0014\u00c0\u00c1\u00ca\u00a1E\u00b6\u00f3\u00d5\u00bfh\u0091\u00ed|?\u00b50\u00c0:\u00b4\u00c8v\u00be\u009f\u0019\u00c0j\u00bct\u0093\u0018\u0004\u00a6\u00bfp\u0012\u0083\u00c0\u00ca\u00813\u00c0\u009d\u00c4 \u00b0rh\u000e\u00c0\u00b4\u00c8v\u00be\u009f\u001a\u00fb\u00bf\u00ecQ\u00b8\u001e\u0085\u008b1\u00c0\u00be\u009f\u001a/\u00dd$\u0007\u00c0\u0088\u0016\u00d9\u00ce\u00f7S\u00fb\u00bf}?5^\u00ba)2\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\u0012\u00c0\u0004V\u000e-\u00b2\u009d\u0000\u00c0B`\u00e5\u00d0\"\u001b2\u00c0\u00b1rh\u0091\u00ed|\f\u00c0d;\u00dfO\u008d\u0097\u0002\u00c0R\u00b8\u001e\u0085\u00eb\u00b10\u00c0r=\n\u00d7\u00a3p\t\u00c0\u00c3\u00f5(\\\u008f\u00c2\u00d5?\u00e7\u00fb\u00a9\u00f1\u00d2M0\u00c0!\u00b0rh\u0091\u00ed\u0001\u00c0}?5^\u00baI\u00d4?\\\u008f\u00c2\u00f5(\u00dc0\u00c0\\\u008f\u00c2\u00f5(\\\t\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u00d0\u00bfc\u0010X9\u00b4\u00c8.\u00c0\u00f1\u00a7\u00c6K7\u0089\u000b\u00c0\u0014\u00aeG\u00e1z\u0014\u00f6?=\n\u00d7\u00a3p\u001d0\u00c0\u0017\u00d9\u00ce\u00f7S\u00e3\u0012\u00c0\u00baI\f\u0002+\u0087\u00ea\u00bf\u00be\u009f\u001a/\u00dd\u00a44\u00c0K\f\u0002+\u0087\u0016\u000e\u00c0\f\u0002+\u0087\u0016\u00d9\u00e2\u00bfx\u00be\u009f\u001a/\u00dd4\u00c0\u007fj\u00bct\u0093\u0018\u0016\u00c0\u00fd\u00a9\u00f1\u00d2Mb\u00fa\u00bfr=\n\u00d7\u00a3\u00905\u00c0\u00bct\u0093\u0018\u0004V\u0019\u00c0\u00d1\"\u00db\u00f9~j\u00f0\u00bf\u00e3\u00a5\u009b\u00c4 \u00f05\u00c0b\u0010X9\u00b4H\u0018\u00c0\u009a\u0099\u0099\u0099\u0099\u0099\u0007\u00c0\u00ecQ\u00b8\u001e\u0085\u00eb4\u00c0\u00a2E\u00b6\u00f3\u00fd\u00d4\u0012\u00c0\u00f2\u00d2Mb\u0010X\u00ff\u00bf&\u0006\u0081\u0095C\u00cb6\u00c0\u0018\u00d9\u00ce\u00f7Sc\u0011\u00c0P\u008d\u0097n\u0012\u0083\u00f0\u00bf\u00ac\u001cZd;?7\u00c0\u00cav\u00be\u009f\u001a/\u0015\u00c0\n\u00d7\u00a3p=\n\u0004\u00c0\u00a0\u001a/\u00dd$\u00867\u00c0r=\n\u00d7\u00a3\u00f0\u0015\u00c0ffffff\r\u00c0`\u00e5\u00d0\"\u00db\u00194\u00c0,\u0087\u0016\u00d9\u00ce\u00f7\u000b\u00c0\u00afG\u00e1z\u0014\u00ae\u0006\u00c0?5^\u00baI\u008c6\u00c05^\u00baI\f\u0002\u000f\u00c0333333\u000e\u00c0\u0082\u0095C\u008bl'6\u00c0:\u00b4\u00c8v\u00be\u009f\b\u00c0\u0083\u00c0\u00ca\u00a1E\u00b6\b\u00c0\u00dd$\u0006\u0081\u0095\u00837\u00c0\u00fc\u00a9\u00f1\u00d2Mb\u0002\u00c0\u00d0\u00f7S\u00e3\u00a5\u009b\u0002\u00c0\u0004V\u000e-\u00b2\u00bd5\u00c0%\u0006\u0081\u0095C\u008b\u0000\u00c0\u00f8S\u00e3\u00a5\u009b\u00c4\u00f0\u00bf\u0098n\u0012\u0083\u00c0\u00aa5\u00c0\u0082\u0095C\u008bl\u00e7\u00f9\u00bf\u00aa\u00f1\u00d2Mb\u0010\t\u00c0\u00e9&1\b\u00ac\u001c5\u00c0!\u00b0rh\u0091m\u001d\u00c0Y9\u00b4\u00c8v\u00be\t\u00c0.\u00b2\u009d\u00ef\u00a7F5\u00c0,\u0087\u0016\u00d9\u00cew\u001f\u00c0\u00e9&1\b\u00ac\u001c\u0005\u00c0\u00c9v\u00be\u009f\u001a\u00ef5\u00c0\u007fj\u00bct\u0093X \u00c0R\u00b8\u001e\u0085\u00ebQ\u0011\u00c0\u00a4p=\n\u00d7\u00c34\u00c0\u0098n\u0012\u0083\u00c0J\u001e\u00c0\b\u00ac\u001cZd\u00bb\u0014\u00c0\u0088\u0016\u00d9\u00ce\u00f7s4\u00c0\u009a\u0099\u0099\u0099\u0099\u0019\"\u00c0\u009c\u00c4 \u00b0rh\u0013\u00c0Zd;\u00dfO\u00ed5\u00c0\u001f\u0085\u00ebQ\u00b8\u00de!\u00c0\u00aa\u00f1\u00d2Mb\u0010\u000e\u00c0\u0092\u00ed|?5~3\u00c07\u0089A`\u00e5\u00d0\"\u00c0\u0019\u0004V\u000e-\u00b2\u0006\u00c0m\u00e7\u00fb\u00a9\u00f1\u00d23\u00c0\u0092\u00ed|?5^ \u00c0\u00bdt\u0093\u0018\u0004V\f\u00c0\b\u00ac\u001cZd\u00bb2\u00c09\u00b4\u00c8v\u00be\u00df!\u00c0\u00ad\u001cZd;_\u0018\u00c0\u00d5x\u00e9&1(6\u00c0B`\u00e5\u00d0\"\u00db#\u00c0\u0091\u00ed|?5^\u0013\u00c0\u00aeG\u00e1z\u0014\u00ee2\u00c0\u00e0O\u008d\u0097nR&\u00c0\u00c3\u00f5(\\\u008fB\u0012\u00c0'1\b\u00ac\u001c\u00ba2\u00c0\u0010X9\u00b4\u00c8\u00f6\"\u00c0^\u00baI\f\u0002\u00ab\u0017\u00c0\u000e-\u00b2\u009d\u00ef\u00a72\u00c0\u0080j\u00bct\u0093\u0018$\u00c0\u0019\u0004V\u000e-\u00b2\u0010\u00c06^\u00baI\fb6\u00c0"], "__qualname__": "ProteinComponent", "__module__": "gufe.components.proteincomponent", ":version:": 1}], ["LigandAtomMapping-f41553d7a14794ba0032735151e13492", {"componentA": {":gufe-key:": "SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3"}, "componentB": {":gufe-key:": "SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab"}, "componentA_to_componentB": {"1": 0, "2": 1, "3": 2, "4": 3, "5": 4, "6": 5, "7": 6, "8": 7, "9": 8, "10": 9, "11": 10, "12": 11, "13": 13, "14": 14, "15": 15, "16": 16}, "annotations": "{\"score\": 0.9048374180359595}", "__qualname__": "LigandAtomMapping", "__module__": "gufe.mapping.ligandatommapping", ":version:": 1}], ["RelativeHybridTopologyProtocol-59d604ce336f12d44f6e4647a6f7e616", {"settings": {"__class__": "RelativeHybridTopologyProtocolSettings", "__module__": "openfe.protocols.openmm_rfe.equil_rfe_settings", ":is_custom:": true, "forcefield_settings": {"__class__": "OpenMMSystemGeneratorFFSettings", "__module__": "gufe.settings.models", ":is_custom:": true, "constraints": "hbonds", "rigid_water": true, "hydrogen_mass": 3.0, "forcefields": ["amber/ff14SB.xml", "amber/tip3p_standard.xml", "amber/tip3p_HFE_multivalent.xml", "amber/phosaa10.xml", "amber/lipid17_merged.xml"], "small_molecule_forcefield": "openff-2.2.1", "nonbonded_method": "PME", "nonbonded_cutoff": {"magnitude": 0.9, "unit": "nanometer", ":is_custom:": true, "pint_unit_registry": "openff_units"}}, "thermo_settings": {"__class__": "ThermoSettings", "__module__": "gufe.settings.models", ":is_custom:": true, "temperature": {"magnitude": 298.15, "unit": "kelvin", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "pressure": {"magnitude": 1, "unit": "bar", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "ph": null, "redox_potential": null}, "protocol_repeats": 1, "solvation_settings": {"__class__": "OpenMMSolvationSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "solvent_model": "tip3p", "solvent_padding": {"magnitude": 1.5, "unit": "nanometer", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "box_shape": "dodecahedron", "number_of_solvent_molecules": null, "box_vectors": null, "box_size": null}, "partial_charge_settings": {"__class__": "OpenFFPartialChargeSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "partial_charge_method": "am1bcc", "off_toolkit_backend": "ambertools", "number_of_conformers": null, "nagl_model": null}, "lambda_settings": {"__class__": "LambdaSettings", "__module__": "openfe.protocols.openmm_rfe.equil_rfe_settings", ":is_custom:": true, "lambda_functions": "default", "lambda_windows": 3}, "alchemical_settings": {"__class__": "AlchemicalSettings", "__module__": "openfe.protocols.openmm_rfe.equil_rfe_settings", ":is_custom:": true, "endstate_dispersion_correction": false, "use_dispersion_correction": false, "softcore_LJ": "gapsys", "softcore_alpha": 0.85, "turn_off_core_unique_exceptions": true, "explicit_charge_correction": false, "explicit_charge_correction_cutoff": {"magnitude": 0.8, "unit": "nanometer", ":is_custom:": true, "pint_unit_registry": "openff_units"}}, "simulation_settings": {"__class__": "MultiStateSimulationSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "minimization_steps": 500, "equilibration_length": {"magnitude": 0.004999999999999999, "unit": "nanosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "production_length": {"magnitude": 0.009999999999999998, "unit": "nanosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "sampler_method": "repex", "time_per_iteration": {"magnitude": 1.0, "unit": "picosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "real_time_analysis_interval": {"magnitude": 250.0, "unit": "picosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "early_termination_target_error": {"magnitude": 0.0, "unit": "kilocalorie_per_mole", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "real_time_analysis_minimum_time": {"magnitude": 500.0, "unit": "picosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "sams_flatness_criteria": "logZ-flatness", "sams_gamma0": 1.0, "n_replicas": 3}, "engine_settings": {"__class__": "OpenMMEngineSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "compute_platform": null, "gpu_device_index": null}, "integrator_settings": {"__class__": "IntegratorSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "timestep": {"magnitude": 4.0, "unit": "femtosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "langevin_collision_rate": {"magnitude": 1.0, "unit": "1 / picosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "reassign_velocities": false, "n_restart_attempts": 20, "constraint_tolerance": 1e-06, "barostat": "MonteCarloBarostat", "barostat_frequency": {"magnitude": 25.0, "unit": "timestep", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "surface_tension": {"magnitude": 0, "unit": "bar * nanometer", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "remove_com": false}, "output_settings": {"__class__": "MultiStateOutputSettings", "__module__": "openfe.protocols.openmm_utils.omm_settings", ":is_custom:": true, "output_indices": "not water", "checkpoint_interval": {"magnitude": 1.0, "unit": "nanosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "checkpoint_storage_filename": "checkpoint.chk", "forcefield_cache": "db.json", "output_filename": "simulation.nc", "output_structure": "hybrid_system.pdb", "positions_write_frequency": {"magnitude": 100.0, "unit": "picosecond", ":is_custom:": true, "pint_unit_registry": "openff_units"}, "velocities_write_frequency": null}}, "__qualname__": "RelativeHybridTopologyProtocol", "__module__": "openfe.protocols.openmm_rfe.hybridtop_protocols", ":version:": 1}], ["ChemicalSystem-d348563501aa206907231309a902cb32", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_2_solvent", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["ChemicalSystem-042fade29db8a39616f5a902e2da7ae3", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_1_solvent", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["LigandAtomMapping-0cdd365bd42a6a6dcc223a297aeba078", {"componentA": {":gufe-key:": "SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab"}, "componentB": {":gufe-key:": "SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9"}, "componentA_to_componentB": {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10, "11": 11, "12": 13, "13": 14, "14": 15, "15": 16}, "annotations": "{\"score\": 0.9048374180359595}", "__qualname__": "LigandAtomMapping", "__module__": "gufe.mapping.ligandatommapping", ":version:": 1}], ["ChemicalSystem-762ce73233b2ccd593c52026afef907a", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9"}, "protein": {":gufe-key:": "ProteinComponent-ee7ec9e5f1904266e3b388963bdcfe3c"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_3_complex", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["ChemicalSystem-c16bf392cc055620e6c0177fbca350c5", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab"}, "protein": {":gufe-key:": "ProteinComponent-ee7ec9e5f1904266e3b388963bdcfe3c"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_2_complex", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["ChemicalSystem-092349f47625178f21bc28888fc27d6a", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3"}, "protein": {":gufe-key:": "ProteinComponent-ee7ec9e5f1904266e3b388963bdcfe3c"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_1_complex", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["ChemicalSystem-5308ba234089fbedba66a79cdc314ef0", {"components": {"ligand": {":gufe-key:": "SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9"}, "solvent": {":gufe-key:": "SolventComponent-26b4034ad9dbd9f908dfc298ea8d449f"}}, "name": "ligand_3_solvent", "__qualname__": "ChemicalSystem", "__module__": "gufe.chemicalsystem", ":version:": 1}], ["Transformation-d51c5a0397bfe45865a78edd1935e3b0", {"stateA": {":gufe-key:": "ChemicalSystem-042fade29db8a39616f5a902e2da7ae3"}, "stateB": {":gufe-key:": "ChemicalSystem-d348563501aa206907231309a902cb32"}, "protocol": {":gufe-key:": "RelativeHybridTopologyProtocol-59d604ce336f12d44f6e4647a6f7e616"}, "mapping": {":gufe-key:": "LigandAtomMapping-f41553d7a14794ba0032735151e13492"}, "name": "ligand_1_solvent_ligand_2_solvent", "metadata": {}, "__qualname__": "Transformation", "__module__": "gufe.transformations.transformation", ":version:": 1}], ["Transformation-ae340a619b2794a9a3da4e72ef977885", {"stateA": {":gufe-key:": "ChemicalSystem-c16bf392cc055620e6c0177fbca350c5"}, "stateB": {":gufe-key:": "ChemicalSystem-762ce73233b2ccd593c52026afef907a"}, "protocol": {":gufe-key:": "RelativeHybridTopologyProtocol-59d604ce336f12d44f6e4647a6f7e616"}, "mapping": {":gufe-key:": "LigandAtomMapping-0cdd365bd42a6a6dcc223a297aeba078"}, "name": "ligand_2_complex_ligand_3_complex", "metadata": {}, "__qualname__": "Transformation", "__module__": "gufe.transformations.transformation", ":version:": 1}], ["Transformation-a8ccb7f841aafdc860143dad3f2bd82a", {"stateA": {":gufe-key:": "ChemicalSystem-092349f47625178f21bc28888fc27d6a"}, "stateB": {":gufe-key:": "ChemicalSystem-c16bf392cc055620e6c0177fbca350c5"}, "protocol": {":gufe-key:": "RelativeHybridTopologyProtocol-59d604ce336f12d44f6e4647a6f7e616"}, "mapping": {":gufe-key:": "LigandAtomMapping-f41553d7a14794ba0032735151e13492"}, "name": "ligand_1_complex_ligand_2_complex", "metadata": {}, "__qualname__": "Transformation", "__module__": "gufe.transformations.transformation", ":version:": 1}], ["Transformation-622f1d19bea91cd47a7e478e42376305", {"stateA": {":gufe-key:": "ChemicalSystem-d348563501aa206907231309a902cb32"}, "stateB": {":gufe-key:": "ChemicalSystem-5308ba234089fbedba66a79cdc314ef0"}, "protocol": {":gufe-key:": "RelativeHybridTopologyProtocol-59d604ce336f12d44f6e4647a6f7e616"}, "mapping": {":gufe-key:": "LigandAtomMapping-0cdd365bd42a6a6dcc223a297aeba078"}, "name": "ligand_2_solvent_ligand_3_solvent", "metadata": {}, "__qualname__": "Transformation", "__module__": "gufe.transformations.transformation", ":version:": 1}], ["AlchemicalNetwork-f7b23b93aebaa38a4fa6282ed9a2ee9b", {"nodes": [{":gufe-key:": "ChemicalSystem-042fade29db8a39616f5a902e2da7ae3"}, {":gufe-key:": "ChemicalSystem-092349f47625178f21bc28888fc27d6a"}, {":gufe-key:": "ChemicalSystem-5308ba234089fbedba66a79cdc314ef0"}, {":gufe-key:": "ChemicalSystem-762ce73233b2ccd593c52026afef907a"}, {":gufe-key:": "ChemicalSystem-c16bf392cc055620e6c0177fbca350c5"}, {":gufe-key:": "ChemicalSystem-d348563501aa206907231309a902cb32"}], "edges": [{":gufe-key:": "Transformation-622f1d19bea91cd47a7e478e42376305"}, {":gufe-key:": "Transformation-a8ccb7f841aafdc860143dad3f2bd82a"}, {":gufe-key:": "Transformation-ae340a619b2794a9a3da4e72ef977885"}, {":gufe-key:": "Transformation-d51c5a0397bfe45865a78edd1935e3b0"}], "name": null, "__qualname__": "AlchemicalNetwork", "__module__": "gufe.network", ":version:": 1}]] \ No newline at end of file diff --git a/execution/worker_based_execution.ipynb b/execution/worker_based_execution.ipynb new file mode 100644 index 0000000..72b84d3 --- /dev/null +++ b/execution/worker_based_execution.ipynb @@ -0,0 +1,83 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dfffe446-14c0-4dea-92ea-0b9f862fdec6", + "metadata": {}, + "source": [ + "# Worker-Based Execution" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b600d427-abe5-418b-b4d1-a7cb23d7edf0", + "metadata": {}, + "outputs": [], + "source": [ + "import openfe" + ] + }, + { + "cell_type": "markdown", + "id": "0a2035c9-8e0f-454e-9189-be3e41ae57f6", + "metadata": {}, + "source": [ + "load an AlchemicalNetwork to execute - this is a small example campaign with only two edges and pre-charged ligands" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6b72c4a4-310b-498d-afab-78950d5242bc", + "metadata": {}, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'alchemicalNetwork_mc1_small.json'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mFileNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m alchemical_network = openfe.AlchemicalNetwork.from_json(\u001b[33m\"alchemicalNetwork_mc1_small.json\"\u001b[39m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/micromamba/envs/openfe-notebooks/lib/python3.13/site-packages/gufe/tokenization.py:750\u001b[39m, in \u001b[36mGufeTokenizable.from_json\u001b[39m\u001b[34m(cls, file, content)\u001b[39m\n\u001b[32m 746\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mcls\u001b[39m.from_dict(deserialized)\n\u001b[32m 748\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mgufe\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ensure_filelike\n\u001b[32m--> \u001b[39m\u001b[32m750\u001b[39m \u001b[30;43m\u001b[39;49m\u001b[30;43;01mwith\u001b[39;49;00m\u001b[30;43m \u001b[39;49m\u001b[30;43mensure_filelike\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mfile\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43mr\u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43m)\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43;01mas\u001b[39;49;00m\u001b[30;43m \u001b[39;49m\u001b[30;43mf\u001b[39;49m\u001b[30;43m:\u001b[39;49m\n\u001b[32m 751\u001b[39m \u001b[30;43m \u001b[39;49m\u001b[30;43mdeserialized\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mjson\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mload\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mf\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mcls\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mJSON_HANDLER\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mdecoder\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 753\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/micromamba/envs/openfe-notebooks/lib/python3.13/site-packages/gufe/utils.py:212\u001b[39m, in \u001b[36mensure_filelike.__enter__\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 210\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m__enter__\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[32m 211\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.to_open \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m212\u001b[39m \u001b[38;5;28mself\u001b[39m.context = \u001b[30;43mopen\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mto_open\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 214\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m.context\n", + "\u001b[31mFileNotFoundError\u001b[39m: [Errno 2] No such file or directory: 'alchemicalNetwork_mc1_small.json'" + ] + } + ], + "source": [ + "alchemical_network = openfe.AlchemicalNetwork.from_json(\"alchemicalNetwork_mc1_small.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4080f228-4603-432b-b64f-c632f2c8e52c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From d46a0911295cc1a2acf4d587a43a77bc4c468cdb Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Thu, 27 Aug 2026 15:18:06 -0500 Subject: [PATCH 06/16] add example --- execution/worker_based_execution.ipynb | 1070 +++++++++++++++++++++++- 1 file changed, 1057 insertions(+), 13 deletions(-) diff --git a/execution/worker_based_execution.ipynb b/execution/worker_based_execution.ipynb index 72b84d3..f017048 100644 --- a/execution/worker_based_execution.ipynb +++ b/execution/worker_based_execution.ipynb @@ -28,32 +28,1076 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "6b72c4a4-310b-498d-afab-78950d5242bc", "metadata": {}, + "outputs": [], + "source": [ + "alchemical_network = openfe.AlchemicalNetwork.from_json(\"alchemicalNetwork_mc1_small.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4080f228-4603-432b-b64f-c632f2c8e52c", + "metadata": {}, + "outputs": [], + "source": [ + "# build a database of tasks from the AlchemicalNetwork\n", + "from openfe.orchestration import build_task_db_from_alchemical_network\n", + "\n", + "campaign_name = \"mcl1\"\n", + "task_db, wh = build_task_db_from_alchemical_network(\n", + " alchemical_network=alchemical_network,\n", + " warehouse_dir=campaign_name,\n", + " db_path=f\"{campaign_name}.db\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0467cf6a-0363-4caf-beb4-53c5dd9b1e1d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "TaskStatusDB(engine=Engine(sqlite:///mcl1.db))" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "task_db" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f49cc0c9-8bf0-4529-821e-afae169e8f9a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# verify that the alchemicalnetwork is stored\n", + "wh.exists(alchemical_network.key)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "419a05d8-bcb5-47f8-a2f9-74af8c6367e8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
taskidstatuslast_modifiedtriesmax_triestask_type
0HybridTopologySetupUnit-ecf65f3541c5437bb72715...AVAILABLENaT01
1HybridTopologySetupUnit-355765327d874fdda08b98...AVAILABLENaT01
2HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...AVAILABLENaT01
3HybridTopologySetupUnit-17736cf42a85408f907ff6...AVAILABLENaT01
4HybridTopologyMultiStateSimulationUnit-2618e46...BLOCKEDNaT01
5HybridTopologyMultiStateSimulationUnit-5971e55...BLOCKEDNaT01
6HybridTopologyMultiStateSimulationUnit-2e04387...BLOCKEDNaT01
7HybridTopologyMultiStateSimulationUnit-d96090d...BLOCKEDNaT01
8HybridTopologyMultiStateAnalysisUnit-f5b1efe10...BLOCKEDNaT01
9HybridTopologyMultiStateAnalysisUnit-69e78e802...BLOCKEDNaT01
10HybridTopologyMultiStateAnalysisUnit-e1926eb0c...BLOCKEDNaT01
11HybridTopologyMultiStateAnalysisUnit-d41796011...BLOCKEDNaT01
\n", + "
" + ], + "text/plain": [ + " taskid status \\\n", + "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... AVAILABLE \n", + "1 HybridTopologySetupUnit-355765327d874fdda08b98... AVAILABLE \n", + "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... AVAILABLE \n", + "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... AVAILABLE \n", + "4 HybridTopologyMultiStateSimulationUnit-2618e46... BLOCKED \n", + "5 HybridTopologyMultiStateSimulationUnit-5971e55... BLOCKED \n", + "6 HybridTopologyMultiStateSimulationUnit-2e04387... BLOCKED \n", + "7 HybridTopologyMultiStateSimulationUnit-d96090d... BLOCKED \n", + "8 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-69e78e802... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-d41796011... BLOCKED \n", + "\n", + " last_modified tries max_tries task_type \n", + "0 NaT 0 1 \n", + "1 NaT 0 1 \n", + "2 NaT 0 1 \n", + "3 NaT 0 1 \n", + "4 NaT 0 1 \n", + "5 NaT 0 1 \n", + "6 NaT 0 1 \n", + "7 NaT 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from openfe.orchestration import get_task_df, get_dependency_df\n", + "\n", + "task_df = get_task_df(task_db);\n", + "task_df " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1a09d3cb-e0a3-4129-be06-b122381b0735", + "metadata": {}, "outputs": [ { - "ename": "FileNotFoundError", - "evalue": "[Errno 2] No such file or directory: 'alchemicalNetwork_mc1_small.json'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mFileNotFoundError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m alchemical_network = openfe.AlchemicalNetwork.from_json(\u001b[33m\"alchemicalNetwork_mc1_small.json\"\u001b[39m)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/micromamba/envs/openfe-notebooks/lib/python3.13/site-packages/gufe/tokenization.py:750\u001b[39m, in \u001b[36mGufeTokenizable.from_json\u001b[39m\u001b[34m(cls, file, content)\u001b[39m\n\u001b[32m 746\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mcls\u001b[39m.from_dict(deserialized)\n\u001b[32m 748\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mgufe\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ensure_filelike\n\u001b[32m--> \u001b[39m\u001b[32m750\u001b[39m \u001b[30;43m\u001b[39;49m\u001b[30;43;01mwith\u001b[39;49;00m\u001b[30;43m \u001b[39;49m\u001b[30;43mensure_filelike\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mfile\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43mr\u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43m)\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43;01mas\u001b[39;49;00m\u001b[30;43m \u001b[39;49m\u001b[30;43mf\u001b[39;49m\u001b[30;43m:\u001b[39;49m\n\u001b[32m 751\u001b[39m \u001b[30;43m \u001b[39;49m\u001b[30;43mdeserialized\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mjson\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mload\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mf\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mcls\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mJSON_HANDLER\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mdecoder\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 753\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/micromamba/envs/openfe-notebooks/lib/python3.13/site-packages/gufe/utils.py:212\u001b[39m, in \u001b[36mensure_filelike.__enter__\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 210\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m__enter__\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[32m 211\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.to_open \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m212\u001b[39m \u001b[38;5;28mself\u001b[39m.context = \u001b[30;43mopen\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mto_open\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m 214\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m.context\n", - "\u001b[31mFileNotFoundError\u001b[39m: [Errno 2] No such file or directory: 'alchemicalNetwork_mc1_small.json'" + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
fromtoblocking
0HybridTopologySetupUnit-ecf65f3541c5437bb72715...HybridTopologyMultiStateSimulationUnit-2618e46...True
1HybridTopologySetupUnit-355765327d874fdda08b98...HybridTopologyMultiStateSimulationUnit-5971e55...True
2HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...HybridTopologyMultiStateSimulationUnit-2e04387...True
3HybridTopologySetupUnit-17736cf42a85408f907ff6...HybridTopologyMultiStateSimulationUnit-d96090d...True
4HybridTopologySetupUnit-ecf65f3541c5437bb72715...HybridTopologyMultiStateAnalysisUnit-f5b1efe10...True
5HybridTopologyMultiStateSimulationUnit-2618e46...HybridTopologyMultiStateAnalysisUnit-f5b1efe10...True
6HybridTopologySetupUnit-355765327d874fdda08b98...HybridTopologyMultiStateAnalysisUnit-69e78e802...True
7HybridTopologyMultiStateSimulationUnit-5971e55...HybridTopologyMultiStateAnalysisUnit-69e78e802...True
8HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...HybridTopologyMultiStateAnalysisUnit-e1926eb0c...True
9HybridTopologyMultiStateSimulationUnit-2e04387...HybridTopologyMultiStateAnalysisUnit-e1926eb0c...True
10HybridTopologySetupUnit-17736cf42a85408f907ff6...HybridTopologyMultiStateAnalysisUnit-d41796011...True
11HybridTopologyMultiStateSimulationUnit-d96090d...HybridTopologyMultiStateAnalysisUnit-d41796011...True
\n", + "
" + ], + "text/plain": [ + " from \\\n", + "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... \n", + "1 HybridTopologySetupUnit-355765327d874fdda08b98... \n", + "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... \n", + "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... \n", + "4 HybridTopologySetupUnit-ecf65f3541c5437bb72715... \n", + "5 HybridTopologyMultiStateSimulationUnit-2618e46... \n", + "6 HybridTopologySetupUnit-355765327d874fdda08b98... \n", + "7 HybridTopologyMultiStateSimulationUnit-5971e55... \n", + "8 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... \n", + "9 HybridTopologyMultiStateSimulationUnit-2e04387... \n", + "10 HybridTopologySetupUnit-17736cf42a85408f907ff6... \n", + "11 HybridTopologyMultiStateSimulationUnit-d96090d... \n", + "\n", + " to blocking \n", + "0 HybridTopologyMultiStateSimulationUnit-2618e46... True \n", + "1 HybridTopologyMultiStateSimulationUnit-5971e55... True \n", + "2 HybridTopologyMultiStateSimulationUnit-2e04387... True \n", + "3 HybridTopologyMultiStateSimulationUnit-d96090d... True \n", + "4 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... True \n", + "5 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... True \n", + "6 HybridTopologyMultiStateAnalysisUnit-69e78e802... True \n", + "7 HybridTopologyMultiStateAnalysisUnit-69e78e802... True \n", + "8 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... True \n", + "9 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... True \n", + "10 HybridTopologyMultiStateAnalysisUnit-d41796011... True \n", + "11 HybridTopologyMultiStateAnalysisUnit-d41796011... True " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dep_df = get_dependency_df(task_db);\n", + "dep_df" + ] + }, + { + "cell_type": "markdown", + "id": "2d376371-0160-40ac-ac6b-0e9e3fe80f97", + "metadata": {}, + "source": [ + "## use a Worker to run the jobs" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a74e9960-8d17-4bc4-8069-6946d8cea370", + "metadata": {}, + "outputs": [], + "source": [ + "from openfe.orchestration import Worker\n", + "db_path = f\"{wh.name}.db\"\n", + "worker = Worker(wh, db_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "17c2b502-6ece-45c9-af05-6678f896f7e4", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0: 66% full (312.2G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0 as failed.\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34: 66% full (312.2G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0', ProtocolUnitFailure(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34 as failed.\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54: 66% full (312.4G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34', ProtocolUnitFailure(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54 as failed.\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.8%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72: 66% full (312.4G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54', ProtocolUnitFailure(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72 as failed.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72', ProtocolUnitFailure(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" ] } ], "source": [ - "alchemical_network = openfe.AlchemicalNetwork.from_json(\"alchemicalNetwork_mc1_small.json\")" + "# run this cell to execute units and do a status check\n", + "n_submissions = 4\n", + "for _ in range(n_submissions):\n", + " exec_result = worker.execute_unit(scratch='scratch')\n", + " print(exec_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e8ebb623-1a1f-4fa2-bf8d-8a732a75344c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
taskidstatuslast_modifiedtriesmax_triestask_type
0HybridTopologySetupUnit-ecf65f3541c5437bb72715...TOO_MANY_RETRIES2026-08-27 15:16:23.08144611
1HybridTopologySetupUnit-355765327d874fdda08b98...TOO_MANY_RETRIES2026-08-27 15:16:23.66851111
2HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...TOO_MANY_RETRIES2026-08-27 15:16:24.05675111
3HybridTopologySetupUnit-17736cf42a85408f907ff6...TOO_MANY_RETRIES2026-08-27 15:16:24.43927611
4HybridTopologyMultiStateSimulationUnit-2618e46...BLOCKEDNaT01
5HybridTopologyMultiStateSimulationUnit-5971e55...BLOCKEDNaT01
6HybridTopologyMultiStateSimulationUnit-2e04387...BLOCKEDNaT01
7HybridTopologyMultiStateSimulationUnit-d96090d...BLOCKEDNaT01
8HybridTopologyMultiStateAnalysisUnit-f5b1efe10...BLOCKEDNaT01
9HybridTopologyMultiStateAnalysisUnit-69e78e802...BLOCKEDNaT01
10HybridTopologyMultiStateAnalysisUnit-e1926eb0c...BLOCKEDNaT01
11HybridTopologyMultiStateAnalysisUnit-d41796011...BLOCKEDNaT01
\n", + "
" + ], + "text/plain": [ + " taskid status \\\n", + "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... TOO_MANY_RETRIES \n", + "1 HybridTopologySetupUnit-355765327d874fdda08b98... TOO_MANY_RETRIES \n", + "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... TOO_MANY_RETRIES \n", + "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... TOO_MANY_RETRIES \n", + "4 HybridTopologyMultiStateSimulationUnit-2618e46... BLOCKED \n", + "5 HybridTopologyMultiStateSimulationUnit-5971e55... BLOCKED \n", + "6 HybridTopologyMultiStateSimulationUnit-2e04387... BLOCKED \n", + "7 HybridTopologyMultiStateSimulationUnit-d96090d... BLOCKED \n", + "8 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-69e78e802... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-d41796011... BLOCKED \n", + "\n", + " last_modified tries max_tries task_type \n", + "0 2026-08-27 15:16:23.081446 1 1 \n", + "1 2026-08-27 15:16:23.668511 1 1 \n", + "2 2026-08-27 15:16:24.056751 1 1 \n", + "3 2026-08-27 15:16:24.439276 1 1 \n", + "4 NaT 0 1 \n", + "5 NaT 0 1 \n", + "6 NaT 0 1 \n", + "7 NaT 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df=get_task_df(task_db)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "2bd7c48e-2098-4bc2-a093-d4d34018b42f", + "metadata": {}, + "source": [ + "## Load results \n", + "(cooking show magic)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", + "metadata": {}, + "outputs": [], + "source": [ + "# load a different warehouse\n", + "from openfe.storage.warehouse import FileSystemWarehouse\n", + "other_wh = FileSystemWarehouse.from_dir(\"mcl1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "3204e27c-b3b4-4997-8cac-b0932cfa6ccb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n" + ] + } + ], + "source": [ + "result_edges = other_wh.gather_all_results();" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e1e1314a-6ef8-453d-b70f-19123ab98307", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(,\n", + " ),\n", + " (,\n", + " ),\n", + " (,\n", + " ),\n", + " (,\n", + " )]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result_edges" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "7ea35b83-b88a-426c-9436-5ee7fec3b0c9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(pr.get_estimate(), pr.get_uncertainty()) for pr, dag in result_edges if dag.ok()]" ] }, { "cell_type": "code", "execution_count": null, - "id": "4080f228-4603-432b-b64f-c632f2c8e52c", + "id": "be1c25cb-b3e0-41d1-9cd3-a84b5b8820c8", "metadata": {}, "outputs": [], "source": [] From c6b32a8cee1c4fb5bc7debbe7c413d8193e7a5e7 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Fri, 25 Sep 2026 13:52:23 -0700 Subject: [PATCH 07/16] rename --- ...ed_execution.ipynb => task_based_execution_python_api.ipynb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename execution/{worker_based_execution.ipynb => task_based_execution_python_api.ipynb} (99%) diff --git a/execution/worker_based_execution.ipynb b/execution/task_based_execution_python_api.ipynb similarity index 99% rename from execution/worker_based_execution.ipynb rename to execution/task_based_execution_python_api.ipynb index f017048..537f89e 100644 --- a/execution/worker_based_execution.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -5,7 +5,7 @@ "id": "dfffe446-14c0-4dea-92ea-0b9f862fdec6", "metadata": {}, "source": [ - "# Worker-Based Execution" + "# Task-Based Execution with the Python API" ] }, { From 8df01c5c2e96a43b7d88bc6432c3d5a167a82967 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Fri, 25 Sep 2026 15:02:54 -0700 Subject: [PATCH 08/16] copy over rbfe CLI as a starting point --- execution/task_based_execution_cli.md | 345 ++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 execution/task_based_execution_cli.md diff --git a/execution/task_based_execution_cli.md b/execution/task_based_execution_cli.md new file mode 100644 index 0000000..d95c454 --- /dev/null +++ b/execution/task_based_execution_cli.md @@ -0,0 +1,345 @@ +# Task-based execution with the OpenFE CLI + +This tutorial demonstrates how to use the OpenFE CLI (Command Line Interface) to run an OpenFE campaign using task-based execution. + +Task-based execution is an alternative to using ``openfe quickrun``. +See the Execution User Guide for a more detailed explanation of execution options, and see the Task-based Execution Python API tutorial for how to do all the same steps shown below, but with the Python API. + +.. TODO: add links + +## 0. Collect input files + +To work through this tutorial, start out with a fresh directory. + +You can download the tutorial materials (including these instructions) using the command: + +```bash +openfe fetch rbfe-tutorial +``` + + +```text +network_setup +├── ligand_network.graphml +├── network_setup.json +└── transformations/ + ├── rbfe_lig_ejm_31_complex_lig_ejm_42_complex.json + ├── rbfe_lig_ejm_31_complex_lig_ejm_46_complex.json + ├── rbfe_lig_ejm_31_complex_lig_ejm_47_complex.json + ├── rbfe_lig_ejm_31_complex_lig_ejm_48_complex.json + ├── rbfe_lig_ejm_31_complex_lig_ejm_50_complex.json + ├── rbfe_lig_ejm_31_solvent_lig_ejm_42_solvent.json + ├── rbfe_lig_ejm_31_solvent_lig_ejm_46_solvent.json + ... +``` + +The `ligand_network.graphml` file describes the network of ligands connected by atom mappings. + +We can visualize this network with the `openfe view-ligand-network` command +to open an interactive viewer.: + +```bash +openfe view-ligand-network network_setup/ligand_network.graphml +``` + +You can move the ligand names around to get a better view of the structure, and if you click on the edge, you will see the +mapping for that edge. + +The files that describe each individual simulation we will run are located within `network_setup/transformations/`. +Each JSON file represents a single alchemical leg to run and contains all the necessary information to run that leg. +Filenames indicate ligand names as taken from the SDF; for example, the file `rbfe_lig_ejm_31_complex_lig_ejm_42_complex.json` is the leg associated with the transformation of the ligand `lig_ejm_31` into `lig_ejm_42` while in complex with the protein. + +A single RBFE between a pair of ligands requires running two legs of an alchemical cycle (JSON files) - one for the ligand in solvent, and one for the ligand complexed with the +protein. +The results from these two simulations can then be combined in the next step (``openfe gather``) to obtain a single $\Delta\Delta G$ relative binding free energy value. + +Note that this specific setup makes a number of choices for you, from filenames to default values. +All of these choices can be customized in the Python API. +Here are the specifics on how these simulation are set up: + +1. **kartograf** is used to generate the atom mappings between ligands. +2. The ligand network is a minimal spanning tree, with the default LOMAP scorer used to score the mappings. +3. Solvent is water with NaCl at an ionic strength of 0.15 M (neutralized) with a minimum distance of 1.2 nm from the solute to the edge of the box. +4. The protocol used is OpenFE's OpenMM-based Hybrid Topology RFE protocol, with [default settings](https://docs.openfree.energy/en/stable/reference/api/openmm_rfe.html#protocol-settings). + +### Optional step: Customize your campaign setup + +OpenFE contains many different options and methods for setting up a simulation campaign. +While less flexible than using the API, some options can be modified by providing a settings file in the `.yaml` format. + +The default settings represented in YAML settings format is as follows: + +``` yaml +mapper: kartograf + settings: + atom_max_distance: 0.95 + atom_map_hydrogens: true + map_hydrogens_on_hydrogens_only: true + map_exact_ring_matches_only: true + allow_partial_fused_rings: true + allow_bond_breaks: false + +network: + method: generate_minimal_spanning_network + +partial_charge: + method: am1bcc + settings: + off_toolkit_backend: ambertools + number_of_conformers: None + nagl_model: None + +``` + +Let's assume you want to exchange the kartograf atom mapper with the LOMAP atom mapper, the Minimal Spanning Tree +Network Planner with the Maximal Network Planner and the am1bcc charge method with [OpenFF NAGL](https://docs.openforcefield.org/projects/nagl/): + +Provide a file like `settings.yaml` with the desired changes: + +```yaml +mapper: + method: lomap + +network: + method: generate_maximal_network + +partial_charge: + method: nagl + settings: + nagl_model: null # null specifies the use of the latest nagl model +``` + +Plan your rbfe network with an additional `-s` flag for passing the settings: + +```bash +openfe plan-rbfe-network -M tyk2_ligands.sdf -p tyk2_protein.pdb -o network_setup --n-protocol-repeats 1 -s settings.yaml +``` + +The output of the CLI program will now reflect the changes made: + +```text +RBFE-NETWORK PLANNER +______________________ + +Parsing in Files: + Got input: + Small Molecules: SmallMoleculeComponent(name=lig_ejm_31) SmallMoleculeComponent(name=lig_ejm_42) SmallMoleculeComponent(name=lig_ejm_43) SmallMoleculeComponent(name=lig_ejm_46) SmallMoleculeComponent(name=lig_ejm_47) SmallMoleculeComponent(name=lig_ejm_48) SmallMoleculeComponent(name=lig_ejm_50) SmallMoleculeComponent(name=lig_jmc_23) SmallMoleculeComponent(name=lig_jmc_27) SmallMoleculeComponent(name=lig_jmc_28) + Protein: ProteinComponent(name=) + Cofactors: [] + Solvent: SolventComponent(name=O, Na+, Cl-) + +Using Options: + Mapper: + Mapping Scorer: + Network Generation: + Partial Charge Generation: am1bcc + + n_protocol_repeats=1 (1 simulation repeat(s) per transformation) +``` + +To see all settings customizable by YAML input, run `openfe plan-rbfe-network -h`. + +## 2. Run the simulations + +For this tutorial, we have precalculated data you can load, since running the simulations can take a long time. +However, you could, in principle, run each simulation on your local machine. + +You can run each leg individually by using the ``openfe quickrun`` command: + +```bash +openfe quickrun path/to/transformation.json -o results.json -d working-directory +``` + +where + +- `path/to/transformation.json` is the path to one of the transformation files created by ``openfe plan-rbfe-network`` in the prior step. +- `-o results.json` to give the final output JSON file and `-d` for the directory where simulation results should be stored. + +To run one simulation from the tutorial data, a command might look like: + +```bash +openfe quickrun network_setup/transformations/rbfe_lig_ejm_31_solvent_lig_ejm_42_solvent.json -o results/rbfe_lig_ejm_31_solvent_lig_ejm_42_solvent.json -d results/rbfe_lig_ejm_31_solvent_lig_ejm_42_solvent/ +``` + +When running a complete network of simulations, it is important to ensure that the file name for the result JSON and name of the working directory are different for each leg and each repeat, otherwise you'll overwrite results. +We recommend doing this programmatically, such as the example below, which uses the fact that the JSON files in ``network_setup/transformations/`` have unique names, and creates directories and result JSON files based on those names. + +To run all legs sequentially (not recommended!!) you could do something like: + +```bash +# this will take a very long time! don't actually do it! +for file in network_setup/transformations/*.json; do + relpath=${file:30} # strip off "network_setup/transformations/" + dirpath=${relpath%.*} # strip off final ".json" + # loop over three repeats + for repeat in {1..3}; do + openfe quickrun $file -o results/repeat${repeat}/$relpath -d results/repeat${repeat}/$dirpath + done +done +``` + +In practice, you probably want to submit the simulations to an HPC queue. +In that case, you'll want to create a new job script for each simulation JSON file, and the core of that job script will be to run the `openfe quickrun` command above. + +Details of what information is needed in that job script will depend on your computing center, but below is an example of a very simple script that will create +and submit a job script for the simplest SLURM use case: + +```bash +for file in network_setup/transformations/*.json; do + relpath=${file:30} # strip off "network_setup/transformations/" + dirpath=${relpath%.*} # strip off final ".json" + for repeat in {1..3}; do + jobpath="network_setup/transformations/${dirpath}_${repeat}.job" + cmd="openfe quickrun $file -o results/repeat${repeat}/$relpath -d results/repeat${repeat}/$dirpath" + echo -e "#!/usr/bin/env bash\n${cmd}" > $jobpath + sbatch $jobpath + done +done +``` + +The approach listed here is what was used for the example results that we'll download in the next section. + +## 3. Gather the results + +To get example simulation output data, use the following commands: + +```bash +openfe fetch rbfe-tutorial-results +tar xzf rbfe_results.tar.gz +``` + +This will create a directory called `results/` that contains files with the file structure you would get from running the calculations as above. +The result JSON files are the actual results of a simulation. +To keep this example data a reasonable size, files typically generated during the simulation (such as detailed simulation information) have been replaced by empty files to keep the size smaller. +The structure should look something like this: + + +```text +results +├── replicate_0 +│   ├── rbfe_lig_ejm_31_complex_lig_ejm_42_complex +│   │   ├── shared_RelativeHybridTopologyProtocolUnit-79c279f04ec84218b7935bc0447539a9_attempt_0 +│   │   │   ├── checkpoint.nc +│   │   │   ├── db.json +│   │   │   ├── simulation_real_time_analysis.yaml +│   │   │   └── simulation.nc +│   │   ├── shared_RelativeHybridTopologyProtocolUnit-a3cef34132aa4e9cbb824fcbcd043b0e_attempt_0 +│   │   │   ├── checkpoint.nc +│   │   │   ├── db.json +│   │   │   ├── simulation_real_time_analysis.yaml +│   │   │   └── simulation.nc +│   │   └── shared_RelativeHybridTopologyProtocolUnit-abb2b104151c45fc8b0993fa0a7ee0af_attempt_0 +│   │   ├── checkpoint.nc +│   │   ├── db.json +│   │   ├── simulation_real_time_analysis.yaml +│   │   └── simulation.nc +│   ├── rbfe_lig_ejm_31_complex_lig_ejm_42_complex.json +│   ├── rbfe_lig_ejm_31_complex_lig_ejm_46_complex +│   │   ├── shared_RelativeHybridTopologyProtocolUnit-361500fe831c431aa830efd207db0955_attempt_0 +│   │   │   ├── checkpoint.nc +│   │   │   ├── db.json +│   │   │   ├── simulation_real_time_analysis.yaml +│   │   │   └── simulation.nc +│   │   ├── shared_RelativeHybridTopologyProtocolUnit-5a6176cfbf074f92bc76caac91b1c1bf_attempt_0 +│   │   │   ├── checkpoint.nc +│   │   │   ├── db.json +│   │   │   ├── simulation_real_time_analysis.yaml +│   │   │   └── simulation.nc +│   │   └── shared_RelativeHybridTopologyProtocolUnit-e16de73f07964e9096f34611e0c874ca_attempt_0 +│   │   ├── checkpoint.nc +│   │   ├── db.json +│   │   ├── simulation_real_time_analysis.yaml +│   │   └── simulation.nc +│   ├── rbfe_lig_ejm_31_complex_lig_ejm_46_complex.json +... +``` + +The JSON results file contains not only the calculated $\Delta G$, and uncertainty estimate, but also important metadata about what happened during the simulation. +In particular, it will contain information about any errors or failures that occurred -- these errors will not cause the entire campaign to fail, and will be recorded so you can later analyze what went wrong. + +To gather all the $\Delta G$ estimates into a single file, use the `openfe gather` command from within the working directory used above: + +```bash +openfe gather results/ --report dg -o final_results.tsv +``` + +Note that if you have multiple results directories, you can pass multiple directories, e.g. ``openfe gather results_0/ results_1/``. + +This will write out a tab-separated table of results where the results reported are controlled by the `--report` option: + +- `dg` (default) reports the ligand and the results are the maximum + likelihood estimate of its absolute free, and the associated + uncertainty from DDG replica averages and standard deviations. +- `ddg` reports pairs of `ligand_i` and `ligand_j`, the calculated + relative free energy `DDG(i->j) = DG(j) - DG(i)` and its uncertainty. +- `raw` reports the raw results, giving the leg (`vacuum`, `solvent`, or + `complex`), `ligand_i`, `ligand_j`, the raw `DG(i->j)` associated with it. + +The resulting file (`final_results.tsv`) will look something like this: + + + +```text +ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) +lig_ejm_31 -0.09 0.05 +lig_ejm_42 0.7 0.1 +lig_ejm_46 -0.98 0.05 +lig_ejm_47 -0.1 0.1 +lig_ejm_48 0.53 0.09 +lig_ejm_50 0.91 0.06 +lig_ejm_43 2.0 0.2 +lig_jmc_23 -0.68 0.09 +lig_jmc_27 -1.1 0.1 +lig_jmc_28 -1.25 0.08 +``` --> From 5a09a1c129f04aa2512dc22e3d91cf46ae4e4a63 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 08:21:17 -0700 Subject: [PATCH 09/16] update gitignore --- .gitignore | 3 + .../task_based_execution_python_api.ipynb | 578 +++++++++--------- 2 files changed, 299 insertions(+), 282 deletions(-) diff --git a/.gitignore b/.gitignore index a255081..e4f3f5f 100644 --- a/.gitignore +++ b/.gitignore @@ -256,3 +256,6 @@ showcase/hybrid_system.pdb showcase/results/ showcase/tyk2_edge.png showcase/tyk2_json/ + +execution/task*.db +execution/warehouse* \ No newline at end of file diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index 537f89e..63431d5 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -23,12 +23,14 @@ "id": "0a2035c9-8e0f-454e-9189-be3e41ae57f6", "metadata": {}, "source": [ + "**TODO: link to tutorial(s) on creating an alchemical network**\n", + "\n", "load an AlchemicalNetwork to execute - this is a small example campaign with only two edges and pre-charged ligands" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "6b72c4a4-310b-498d-afab-78950d5242bc", "metadata": {}, "outputs": [], @@ -38,35 +40,38 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "4080f228-4603-432b-b64f-c632f2c8e52c", "metadata": {}, "outputs": [], "source": [ "# build a database of tasks from the AlchemicalNetwork\n", - "from openfe.orchestration import build_task_db_from_alchemical_network\n", + "from openfe.orchestration import setup_task_campaign\n", "\n", "campaign_name = \"mcl1\"\n", - "task_db, wh = build_task_db_from_alchemical_network(\n", + "warehouse_dir = f\"warehouse_{campaign_name}\"\n", + "db_path = f\"tasks_{campaign_name}.db\"\n", + "\n", + "task_db, wh = setup_task_campaign(\n", " alchemical_network=alchemical_network,\n", - " warehouse_dir=campaign_name,\n", - " db_path=f\"{campaign_name}.db\"\n", + " warehouse_dir=warehouse_dir,\n", + " db_path=db_path\n", ")" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "0467cf6a-0363-4caf-beb4-53c5dd9b1e1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "TaskStatusDB(engine=Engine(sqlite:///mcl1.db))" + "TaskStatusDB(engine=Engine(sqlite:///tasks_mcl1.db))" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -77,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "f49cc0c9-8bf0-4529-821e-afae169e8f9a", "metadata": {}, "outputs": [ @@ -87,7 +92,7 @@ "True" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -99,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "419a05d8-bcb5-47f8-a2f9-74af8c6367e8", "metadata": {}, "outputs": [ @@ -129,117 +134,104 @@ " last_modified\n", " tries\n", " max_tries\n", - " task_type\n", " \n", " \n", " \n", " \n", " 0\n", - " HybridTopologySetupUnit-ecf65f3541c5437bb72715...\n", + " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", " AVAILABLE\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-355765327d874fdda08b98...\n", + " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", " AVAILABLE\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...\n", + " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", " AVAILABLE\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-17736cf42a85408f907ff6...\n", + " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", " AVAILABLE\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-2618e46...\n", + " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-5971e55...\n", + " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-2e04387...\n", + " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-d96090d...\n", + " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-f5b1efe10...\n", + " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-69e78e802...\n", + " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-e1926eb0c...\n", + " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-d41796011...\n", + " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", "\n", @@ -247,35 +239,35 @@ ], "text/plain": [ " taskid status \\\n", - "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... AVAILABLE \n", - "1 HybridTopologySetupUnit-355765327d874fdda08b98... AVAILABLE \n", - "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... AVAILABLE \n", - "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... AVAILABLE \n", - "4 HybridTopologyMultiStateSimulationUnit-2618e46... BLOCKED \n", - "5 HybridTopologyMultiStateSimulationUnit-5971e55... BLOCKED \n", - "6 HybridTopologyMultiStateSimulationUnit-2e04387... BLOCKED \n", - "7 HybridTopologyMultiStateSimulationUnit-d96090d... BLOCKED \n", - "8 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-69e78e802... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-d41796011... BLOCKED \n", + "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... AVAILABLE \n", + "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... AVAILABLE \n", + "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... AVAILABLE \n", + "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... AVAILABLE \n", + "4 HybridTopologyMultiStateSimulationUnit-70fe09c... BLOCKED \n", + "5 HybridTopologyMultiStateSimulationUnit-b3a19f6... BLOCKED \n", + "6 HybridTopologyMultiStateSimulationUnit-d27bd1a... BLOCKED \n", + "7 HybridTopologyMultiStateSimulationUnit-bfa5ad9... BLOCKED \n", + "8 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-675f13a80... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-560fd27b0... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... BLOCKED \n", "\n", - " last_modified tries max_tries task_type \n", - "0 NaT 0 1 \n", - "1 NaT 0 1 \n", - "2 NaT 0 1 \n", - "3 NaT 0 1 \n", - "4 NaT 0 1 \n", - "5 NaT 0 1 \n", - "6 NaT 0 1 \n", - "7 NaT 0 1 \n", - "8 NaT 0 1 \n", - "9 NaT 0 1 \n", - "10 NaT 0 1 \n", - "11 NaT 0 1 " + " last_modified tries max_tries \n", + "0 NaT 0 1 \n", + "1 NaT 0 1 \n", + "2 NaT 0 1 \n", + "3 NaT 0 1 \n", + "4 NaT 0 1 \n", + "5 NaT 0 1 \n", + "6 NaT 0 1 \n", + "7 NaT 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -289,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "1a09d3cb-e0a3-4129-be06-b122381b0735", "metadata": {}, "outputs": [ @@ -322,74 +314,74 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-ecf65f3541c5437bb72715...\n", - " HybridTopologyMultiStateSimulationUnit-2618e46...\n", + " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", + " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", " True\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-355765327d874fdda08b98...\n", - " HybridTopologyMultiStateSimulationUnit-5971e55...\n", + " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", + " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", " True\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...\n", - " HybridTopologyMultiStateSimulationUnit-2e04387...\n", + " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", + " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", " True\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-17736cf42a85408f907ff6...\n", - " HybridTopologyMultiStateSimulationUnit-d96090d...\n", + " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", + " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", " True\n", " \n", " \n", " 4\n", - " HybridTopologySetupUnit-ecf65f3541c5437bb72715...\n", - " HybridTopologyMultiStateAnalysisUnit-f5b1efe10...\n", + " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", + " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", " True\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-2618e46...\n", - " HybridTopologyMultiStateAnalysisUnit-f5b1efe10...\n", + " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", + " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", " True\n", " \n", " \n", " 6\n", - " HybridTopologySetupUnit-355765327d874fdda08b98...\n", - " HybridTopologyMultiStateAnalysisUnit-69e78e802...\n", + " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", + " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", " True\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-5971e55...\n", - " HybridTopologyMultiStateAnalysisUnit-69e78e802...\n", + " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", + " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", " True\n", " \n", " \n", " 8\n", - " HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...\n", - " HybridTopologyMultiStateAnalysisUnit-e1926eb0c...\n", + " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", + " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", " True\n", " \n", " \n", " 9\n", - " HybridTopologyMultiStateSimulationUnit-2e04387...\n", - " HybridTopologyMultiStateAnalysisUnit-e1926eb0c...\n", + " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", + " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", " True\n", " \n", " \n", " 10\n", - " HybridTopologySetupUnit-17736cf42a85408f907ff6...\n", - " HybridTopologyMultiStateAnalysisUnit-d41796011...\n", + " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", + " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", " True\n", " \n", " \n", " 11\n", - " HybridTopologyMultiStateSimulationUnit-d96090d...\n", - " HybridTopologyMultiStateAnalysisUnit-d41796011...\n", + " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", + " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", " True\n", " \n", " \n", @@ -398,35 +390,35 @@ ], "text/plain": [ " from \\\n", - "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... \n", - "1 HybridTopologySetupUnit-355765327d874fdda08b98... \n", - "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... \n", - "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... \n", - "4 HybridTopologySetupUnit-ecf65f3541c5437bb72715... \n", - "5 HybridTopologyMultiStateSimulationUnit-2618e46... \n", - "6 HybridTopologySetupUnit-355765327d874fdda08b98... \n", - "7 HybridTopologyMultiStateSimulationUnit-5971e55... \n", - "8 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... \n", - "9 HybridTopologyMultiStateSimulationUnit-2e04387... \n", - "10 HybridTopologySetupUnit-17736cf42a85408f907ff6... \n", - "11 HybridTopologyMultiStateSimulationUnit-d96090d... \n", + "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... \n", + "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... \n", + "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... \n", + "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... \n", + "4 HybridTopologySetupUnit-8327cc87d598469b8766a6... \n", + "5 HybridTopologyMultiStateSimulationUnit-70fe09c... \n", + "6 HybridTopologySetupUnit-8e920b2462ec4acba3e385... \n", + "7 HybridTopologyMultiStateSimulationUnit-b3a19f6... \n", + "8 HybridTopologySetupUnit-02f2da60546f40bdb07787... \n", + "9 HybridTopologyMultiStateSimulationUnit-d27bd1a... \n", + "10 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... \n", + "11 HybridTopologyMultiStateSimulationUnit-bfa5ad9... \n", "\n", " to blocking \n", - "0 HybridTopologyMultiStateSimulationUnit-2618e46... True \n", - "1 HybridTopologyMultiStateSimulationUnit-5971e55... True \n", - "2 HybridTopologyMultiStateSimulationUnit-2e04387... True \n", - "3 HybridTopologyMultiStateSimulationUnit-d96090d... True \n", - "4 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... True \n", - "5 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... True \n", - "6 HybridTopologyMultiStateAnalysisUnit-69e78e802... True \n", - "7 HybridTopologyMultiStateAnalysisUnit-69e78e802... True \n", - "8 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... True \n", - "9 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... True \n", - "10 HybridTopologyMultiStateAnalysisUnit-d41796011... True \n", - "11 HybridTopologyMultiStateAnalysisUnit-d41796011... True " + "0 HybridTopologyMultiStateSimulationUnit-70fe09c... True \n", + "1 HybridTopologyMultiStateSimulationUnit-b3a19f6... True \n", + "2 HybridTopologyMultiStateSimulationUnit-d27bd1a... True \n", + "3 HybridTopologyMultiStateSimulationUnit-bfa5ad9... True \n", + "4 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... True \n", + "5 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... True \n", + "6 HybridTopologyMultiStateAnalysisUnit-675f13a80... True \n", + "7 HybridTopologyMultiStateAnalysisUnit-675f13a80... True \n", + "8 HybridTopologyMultiStateAnalysisUnit-560fd27b0... True \n", + "9 HybridTopologyMultiStateAnalysisUnit-560fd27b0... True \n", + "10 HybridTopologyMultiStateAnalysisUnit-f468b25c2... True \n", + "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... True " ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -446,19 +438,18 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "a74e9960-8d17-4bc4-8069-6946d8cea370", "metadata": {}, "outputs": [], "source": [ "from openfe.orchestration import Worker\n", - "db_path = f\"{wh.name}.db\"\n", "worker = Worker(wh, db_path)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "17c2b502-6ece-45c9-af05-6678f896f7e4", "metadata": {}, "outputs": [ @@ -469,26 +460,35 @@ "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0: 66% full (312.2G free)\n", + "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.0%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd: 73% full (248.0G free)\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0 as failed.\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34'\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6'\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34: 66% full (312.2G free)\n", + "INFO:openfe.utils.system_probe.log:Memory used: 19.9G (65.9%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6: 73% full (248.0G free)\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" ] @@ -497,60 +497,78 @@ "name": "stdout", "output_type": "stream", "text": [ - "('HybridTopologySetupUnit-ecf65f3541c5437bb727155d0c2692a0', ProtocolUnitFailure(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + "('HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34 as failed.\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3'\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.7%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54: 66% full (312.4G free)\n", + "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.0%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3: 73% full (248.0G free)\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "('HybridTopologySetupUnit-355765327d874fdda08b98c1f99b4b34', ProtocolUnitFailure(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + "('HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54 as failed.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 21.4G (62.8%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72: 66% full (312.4G free)\n", + "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.1%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe: 73% full (248.0G free)\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" ] @@ -559,7 +577,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "('HybridTopologySetupUnit-3e15a145d9be4c9aa58d270f7e06df54', ProtocolUnitFailure(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" + "('HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" ] }, { @@ -567,15 +585,24 @@ "output_type": "stream", "text": [ "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72 as failed.\n" + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe' as successfully completed\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "('HybridTopologySetupUnit-17736cf42a85408f907ff64fc78a9b72', ProtocolUnitFailure(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" + "('HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" ] } ], @@ -589,7 +616,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "e8ebb623-1a1f-4fa2-bf8d-8a732a75344c", "metadata": {}, "outputs": [ @@ -619,153 +646,140 @@ " last_modified\n", " tries\n", " max_tries\n", - " task_type\n", " \n", " \n", " \n", " \n", " 0\n", - " HybridTopologySetupUnit-ecf65f3541c5437bb72715...\n", - " TOO_MANY_RETRIES\n", - " 2026-08-27 15:16:23.081446\n", + " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", + " COMPLETED\n", + " 2026-09-29 08:20:03.881418\n", " 1\n", " 1\n", - " \n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-355765327d874fdda08b98...\n", - " TOO_MANY_RETRIES\n", - " 2026-08-27 15:16:23.668511\n", + " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", + " COMPLETED\n", + " 2026-09-29 08:20:04.585753\n", " 1\n", " 1\n", - " \n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-3e15a145d9be4c9aa58d27...\n", - " TOO_MANY_RETRIES\n", - " 2026-08-27 15:16:24.056751\n", + " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", + " COMPLETED\n", + " 2026-09-29 08:20:05.051724\n", " 1\n", " 1\n", - " \n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-17736cf42a85408f907ff6...\n", - " TOO_MANY_RETRIES\n", - " 2026-08-27 15:16:24.439276\n", + " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", + " COMPLETED\n", + " 2026-09-29 08:20:10.138807\n", " 1\n", " 1\n", - " \n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-2618e46...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", + " AVAILABLE\n", + " 2026-09-29 08:20:03.881566\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-5971e55...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", + " AVAILABLE\n", + " 2026-09-29 08:20:04.585913\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-2e04387...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", + " AVAILABLE\n", + " 2026-09-29 08:20:05.051900\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-d96090d...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", + " AVAILABLE\n", + " 2026-09-29 08:20:10.138942\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-f5b1efe10...\n", + " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-69e78e802...\n", + " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-e1926eb0c...\n", + " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-d41796011...\n", + " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", " BLOCKED\n", " NaT\n", " 0\n", " 1\n", - " \n", " \n", " \n", "\n", "" ], "text/plain": [ - " taskid status \\\n", - "0 HybridTopologySetupUnit-ecf65f3541c5437bb72715... TOO_MANY_RETRIES \n", - "1 HybridTopologySetupUnit-355765327d874fdda08b98... TOO_MANY_RETRIES \n", - "2 HybridTopologySetupUnit-3e15a145d9be4c9aa58d27... TOO_MANY_RETRIES \n", - "3 HybridTopologySetupUnit-17736cf42a85408f907ff6... TOO_MANY_RETRIES \n", - "4 HybridTopologyMultiStateSimulationUnit-2618e46... BLOCKED \n", - "5 HybridTopologyMultiStateSimulationUnit-5971e55... BLOCKED \n", - "6 HybridTopologyMultiStateSimulationUnit-2e04387... BLOCKED \n", - "7 HybridTopologyMultiStateSimulationUnit-d96090d... BLOCKED \n", - "8 HybridTopologyMultiStateAnalysisUnit-f5b1efe10... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-69e78e802... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-e1926eb0c... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-d41796011... BLOCKED \n", + " taskid status \\\n", + "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... COMPLETED \n", + "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... COMPLETED \n", + "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... COMPLETED \n", + "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... COMPLETED \n", + "4 HybridTopologyMultiStateSimulationUnit-70fe09c... AVAILABLE \n", + "5 HybridTopologyMultiStateSimulationUnit-b3a19f6... AVAILABLE \n", + "6 HybridTopologyMultiStateSimulationUnit-d27bd1a... AVAILABLE \n", + "7 HybridTopologyMultiStateSimulationUnit-bfa5ad9... AVAILABLE \n", + "8 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-675f13a80... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-560fd27b0... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... BLOCKED \n", "\n", - " last_modified tries max_tries task_type \n", - "0 2026-08-27 15:16:23.081446 1 1 \n", - "1 2026-08-27 15:16:23.668511 1 1 \n", - "2 2026-08-27 15:16:24.056751 1 1 \n", - "3 2026-08-27 15:16:24.439276 1 1 \n", - "4 NaT 0 1 \n", - "5 NaT 0 1 \n", - "6 NaT 0 1 \n", - "7 NaT 0 1 \n", - "8 NaT 0 1 \n", - "9 NaT 0 1 \n", - "10 NaT 0 1 \n", - "11 NaT 0 1 " + " last_modified tries max_tries \n", + "0 2026-09-29 08:20:03.881418 1 1 \n", + "1 2026-09-29 08:20:04.585753 1 1 \n", + "2 2026-09-29 08:20:05.051724 1 1 \n", + "3 2026-09-29 08:20:10.138807 1 1 \n", + "4 2026-09-29 08:20:03.881566 0 1 \n", + "5 2026-09-29 08:20:04.585913 0 1 \n", + "6 2026-09-29 08:20:05.051900 0 1 \n", + "7 2026-09-29 08:20:10.138942 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -786,19 +800,19 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", "metadata": {}, "outputs": [], "source": [ "# load a different warehouse\n", "from openfe.storage.warehouse import FileSystemWarehouse\n", - "other_wh = FileSystemWarehouse.from_dir(\"mcl1\")" + "other_wh = FileSystemWarehouse.from_dir(warehouse_dir)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "3204e27c-b3b4-4997-8cac-b0932cfa6ccb", "metadata": {}, "outputs": [ @@ -808,223 +822,223 @@ "text": [ "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", @@ -1032,9 +1046,9 @@ "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n" @@ -1047,7 +1061,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "id": "e1e1314a-6ef8-453d-b70f-19123ab98307", "metadata": {}, "outputs": [ @@ -1055,16 +1069,16 @@ "data": { "text/plain": [ "[(,\n", - " ),\n", + " ),\n", " (,\n", - " ),\n", + " ),\n", " (,\n", - " ),\n", + " ),\n", " (,\n", - " )]" + " )]" ] }, - "execution_count": 16, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1075,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "id": "7ea35b83-b88a-426c-9436-5ee7fec3b0c9", "metadata": {}, "outputs": [ @@ -1085,7 +1099,7 @@ "[]" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1119,7 +1133,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.15" + "version": "3.14.7" } }, "nbformat": 4, From 83567c6fe2f012840af13de0ceb2011d85dc3c57 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 08:37:18 -0700 Subject: [PATCH 10/16] add todo --- .../task_based_execution_python_api.ipynb | 294 +----------------- 1 file changed, 14 insertions(+), 280 deletions(-) diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index 63431d5..f8062b0 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -795,317 +795,51 @@ "metadata": {}, "source": [ "## Load results \n", - "(cooking show magic)" + "(cooking show magic)\n", + "\n", + "**TODO: rerun to get results with 3 repeats per edge, upload to zenodo**" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", "metadata": {}, "outputs": [], "source": [ "# load a different warehouse\n", "from openfe.storage.warehouse import FileSystemWarehouse\n", - "other_wh = FileSystemWarehouse.from_dir(warehouse_dir)" + "# other_wh = FileSystemWarehouse.from_dir(warehouse_dir)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "id": "3204e27c-b3b4-4997-8cac-b0932cfa6ccb", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n" - ] - } - ], + "outputs": [], "source": [ - "result_edges = other_wh.gather_all_results();" + "# result_edges = other_wh.gather_all_results();" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "id": "e1e1314a-6ef8-453d-b70f-19123ab98307", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(,\n", - " ),\n", - " (,\n", - " ),\n", - " (,\n", - " ),\n", - " (,\n", - " )]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "result_edges" + "# result_edges" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "7ea35b83-b88a-426c-9436-5ee7fec3b0c9", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "[(pr.get_estimate(), pr.get_uncertainty()) for pr, dag in result_edges if dag.ok()]" + "# [(pr.get_estimate(), pr.get_uncertainty()) for pr, dag in result_edges if dag.ok()]" ] }, { From 7702492f2a54503127fef063864c6b502d277ff6 Mon Sep 17 00:00:00 2001 From: Alyssa Travitz Date: Tue, 29 Sep 2026 08:38:19 -0700 Subject: [PATCH 11/16] fix comment --- .../task_based_execution_python_api.ipynb | 150 ++---------------- 1 file changed, 11 insertions(+), 139 deletions(-) diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index f8062b0..db7dd9f 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -449,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 20, "id": "17c2b502-6ece-45c9-af05-6678f896f7e4", "metadata": {}, "outputs": [ @@ -457,157 +457,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.0%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd: 73% full (248.0G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 19.9G (65.9%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6: 73% full (248.0G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-8327cc87d598469b8766a678206405fd', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6' as successfully completed\n", + "INFO:exorcist.taskdb:Unable to select an available task\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.0%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3: 73% full (248.0G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-8e920b2462ec4acba3e3851d7763dfe6', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3' as successfully completed\n", + "INFO:exorcist.taskdb:Unable to select an available task\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Alyssas-Macbook-Pro.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 20.0G (66.1%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe: 73% full (248.0G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-02f2da60546f40bdb07787292f7345c3', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.14/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe' as successfully completed\n" + "INFO:exorcist.taskdb:Unable to select an available task\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Unable to select an available task\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "('HybridTopologySetupUnit-3024c161ec2246c2b5b6c6eeed84fcbe', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + "None\n", + "None\n", + "None\n", + "None\n" ] } ], "source": [ - "# run this cell to execute units and do a status check\n", + "# run this cell to execute units and show the result of the unit\n", "n_submissions = 4\n", "for _ in range(n_submissions):\n", " exec_result = worker.execute_unit(scratch='scratch')\n", From a626a79ebe325e5327edc92901030fb41a99bee8 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Wed, 30 Sep 2026 15:26:56 +0200 Subject: [PATCH 12/16] Add more explanation --- .../task_based_execution_python_api.ipynb | 1659 +++++++++++++++-- 1 file changed, 1470 insertions(+), 189 deletions(-) diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index db7dd9f..6fc0344 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -5,7 +5,17 @@ "id": "dfffe446-14c0-4dea-92ea-0b9f862fdec6", "metadata": {}, "source": [ - "# Task-Based Execution with the Python API" + "# Task-Based Execution with the Python API\n", + "\n", + "With `openfe quickrun`, you execute a specific `Transformation` at a time. Task-based execution instead takes a whole `AlchemicalNetwork`, breaks it into `tasks`, and lets one or more workers pick up whichever tasks are ready to run. Each task is a single `ProtocolUnit`, for example the setup, simulation or analysis step of one repeat of one `Transformation`.\n", + "\n", + "Three objects do the work:\n", + "\n", + "- the **`Warehouse`** stores everything needed to run the campaign (the network, every task) and every result produced;\n", + "- the **`TaskStatusDB`** tracks the status of each task and the dependencies between them;\n", + "- a **`Worker`** executes task from the task database.\n", + "\n", + "This tutorial walks through a complete campaign with the Python API. For the equivalent command-line workflow, see the [Task-based Execution page of the OpenFE user guide](https://openfe--2113.org.readthedocs.build/en/2113/guide/execution/task_based_execution.html)." ] }, { @@ -23,9 +33,11 @@ "id": "0a2035c9-8e0f-454e-9189-be3e41ae57f6", "metadata": {}, "source": [ - "**TODO: link to tutorial(s) on creating an alchemical network**\n", + "## Load an AlchemicalNetwork\n", + "\n", + "The input to a task-based campaign is an `AlchemicalNetwork`. If you don't have one yet, see the [Create an `AlchemicalNetwork` cookbook](https://docs.openfree.energy/en/stable/cookbook/create_alchemical_network.html), or add `--networks-only` to an `openfe plan-rbfe-network` call.\n", "\n", - "load an AlchemicalNetwork to execute - this is a small example campaign with only two edges and pre-charged ligands" + "Here we use a small MCL-1 network with pre-charged ligands and two edges, `ligand_1 → ligand_2` and `ligand_2 → ligand_3`. Each edge has a complex and a solvent leg, giving four `Transformations`. " ] }, { @@ -38,9 +50,22 @@ "alchemical_network = openfe.AlchemicalNetwork.from_json(\"alchemicalNetwork_mc1_small.json\")" ] }, + { + "cell_type": "markdown", + "id": "8c3439c8-02d7-4d6b-ad70-a3162c798ca2", + "metadata": {}, + "source": [ + "## Set up the campaign\n", + "\n", + "We use `setup_task_campaign` to create a task database and Warehouse from an `AlchemicalNetwork`. The Warehouse stores the `AlchemicalNetwork` and every `ProtocolUnit` of every `ProtocolDAG` as a task. \n", + "The `TaskStatusDB` containes each task and its dependencies.\n", + "\n", + "This is equivalent to `openfe setup-task-campaign --alchemical-network alchemicalNetwork_mc1_small.json` on the command line." + ] + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "4080f228-4603-432b-b64f-c632f2c8e52c", "metadata": {}, "outputs": [], @@ -61,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "0467cf6a-0363-4caf-beb4-53c5dd9b1e1d", "metadata": {}, "outputs": [ @@ -71,7 +96,7 @@ "TaskStatusDB(engine=Engine(sqlite:///tasks_mcl1.db))" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -80,9 +105,45 @@ "task_db" ] }, + { + "cell_type": "markdown", + "id": "3657e9ba-44f5-4b95-bdc7-728e891a5b18", + "metadata": {}, + "source": [ + "### The Warehouse\n", + "\n", + "The `Warehouse` is a directory holding several stores: `setup` (the `AlchemicalNetwork` and its individual components), `tasks` (the `ProtocolUnit`s), `protocol_dags` (used to reassemble results later), `results` (every `ProtocolUnitResult`) and `shared` (files passed between units of the same `Transformation`)." + ] + }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, + "id": "92303612-ffd6-4081-9a47-6bbe0f9cabef", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34mprotocol_dags\u001b[m\u001b[m \u001b[34mresults\u001b[m\u001b[m \u001b[34msetup\u001b[m\u001b[m \u001b[34mshared\u001b[m\u001b[m \u001b[34mtasks\u001b[m\u001b[m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=8068) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" + ] + } + ], + "source": [ + "!ls warehouse_mcl1/" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "id": "f49cc0c9-8bf0-4529-821e-afae169e8f9a", "metadata": {}, "outputs": [ @@ -92,19 +153,31 @@ "True" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# verify that the alchemicalnetwork is stored\n", + "# the AlchemicalNetwork is now stored in the Warehouse\n", "wh.exists(alchemical_network.key)" ] }, + { + "cell_type": "markdown", + "id": "1a484cc0-7e77-4024-b818-fc4f35f0d401", + "metadata": {}, + "source": [ + "### The TaskStatusDB\n", + "\n", + "The `TaskStatusDB` is an SQLite database. `get_task_df` returns its task table as a `pandas.DataFrame`, which is the same information shown by `openfe status`.\n", + "\n", + "Each hybrid topology `Transformation` has three units per repeat, so our four `Transformations` give 12 tasks. Only the setup units are `AVAILABLE`; everything else is `BLOCKED` until the tasks it depends on have completed." + ] + }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "id": "419a05d8-bcb5-47f8-a2f9-74af8c6367e8", "metadata": {}, "outputs": [ @@ -139,71 +212,71 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", - " AVAILABLE\n", - " NaT\n", - " 0\n", + " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", + " COMPLETED\n", + " 2026-09-30 10:48:40.483826\n", + " 1\n", " 1\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", - " AVAILABLE\n", - " NaT\n", - " 0\n", + " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", + " COMPLETED\n", + " 2026-09-30 10:48:45.666020\n", + " 1\n", " 1\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", - " AVAILABLE\n", - " NaT\n", - " 0\n", + " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", + " COMPLETED\n", + " 2026-09-30 10:48:46.174758\n", + " 1\n", " 1\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", - " AVAILABLE\n", - " NaT\n", - " 0\n", + " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", + " COMPLETED\n", + " 2026-09-30 10:48:51.551296\n", + " 1\n", " 1\n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", + " AVAILABLE\n", + " 2026-09-30 10:48:40.484011\n", " 0\n", " 1\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-19894f4...\n", + " AVAILABLE\n", + " 2026-09-30 10:48:45.666145\n", " 0\n", " 1\n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-519c99f...\n", + " AVAILABLE\n", + " 2026-09-30 10:48:46.174914\n", " 0\n", " 1\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", - " BLOCKED\n", - " NaT\n", + " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", + " AVAILABLE\n", + " 2026-09-30 10:48:51.551421\n", " 0\n", " 1\n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", + " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -211,7 +284,7 @@ " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", + " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -219,7 +292,7 @@ " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", + " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -227,7 +300,7 @@ " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", + " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -239,35 +312,35 @@ ], "text/plain": [ " taskid status \\\n", - "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... AVAILABLE \n", - "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... AVAILABLE \n", - "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... AVAILABLE \n", - "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... AVAILABLE \n", - "4 HybridTopologyMultiStateSimulationUnit-70fe09c... BLOCKED \n", - "5 HybridTopologyMultiStateSimulationUnit-b3a19f6... BLOCKED \n", - "6 HybridTopologyMultiStateSimulationUnit-d27bd1a... BLOCKED \n", - "7 HybridTopologyMultiStateSimulationUnit-bfa5ad9... BLOCKED \n", - "8 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-675f13a80... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-560fd27b0... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... BLOCKED \n", + "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", + "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", + "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", + "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", + "4 HybridTopologyMultiStateSimulationUnit-d3871d9... AVAILABLE \n", + "5 HybridTopologyMultiStateSimulationUnit-19894f4... AVAILABLE \n", + "6 HybridTopologyMultiStateSimulationUnit-519c99f... AVAILABLE \n", + "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... AVAILABLE \n", + "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", "\n", - " last_modified tries max_tries \n", - "0 NaT 0 1 \n", - "1 NaT 0 1 \n", - "2 NaT 0 1 \n", - "3 NaT 0 1 \n", - "4 NaT 0 1 \n", - "5 NaT 0 1 \n", - "6 NaT 0 1 \n", - "7 NaT 0 1 \n", - "8 NaT 0 1 \n", - "9 NaT 0 1 \n", - "10 NaT 0 1 \n", - "11 NaT 0 1 " + " last_modified tries max_tries \n", + "0 2026-09-30 10:48:40.483826 1 1 \n", + "1 2026-09-30 10:48:45.666020 1 1 \n", + "2 2026-09-30 10:48:46.174758 1 1 \n", + "3 2026-09-30 10:48:51.551296 1 1 \n", + "4 2026-09-30 10:48:40.484011 0 1 \n", + "5 2026-09-30 10:48:45.666145 0 1 \n", + "6 2026-09-30 10:48:46.174914 0 1 \n", + "7 2026-09-30 10:48:51.551421 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " ] }, - "execution_count": 6, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -279,9 +352,17 @@ "task_df " ] }, + { + "cell_type": "markdown", + "id": "ded36e59-73d5-4bca-8ce0-0c916cdf8471", + "metadata": {}, + "source": [ + "`get_dependency_df` shows the dependencies between tasks: the task in `from` must complete before the task in `to` can run. Each simulation unit depends on its setup unit, and each analysis unit depends on both." + ] + }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "1a09d3cb-e0a3-4129-be06-b122381b0735", "metadata": {}, "outputs": [ @@ -314,74 +395,74 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", - " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", + " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", + " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", " True\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", - " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", + " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", + " HybridTopologyMultiStateSimulationUnit-19894f4...\n", " True\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", - " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", + " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", + " HybridTopologyMultiStateSimulationUnit-519c99f...\n", " True\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", - " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", + " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", + " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", " True\n", " \n", " \n", " 4\n", - " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", - " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", + " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", + " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", " True\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", - " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", + " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", + " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", " True\n", " \n", " \n", " 6\n", - " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", - " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", + " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", + " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", " True\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", - " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", + " HybridTopologyMultiStateSimulationUnit-19894f4...\n", + " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", " True\n", " \n", " \n", " 8\n", - " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", - " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", + " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", + " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", " True\n", " \n", " \n", " 9\n", - " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", - " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", + " HybridTopologyMultiStateSimulationUnit-519c99f...\n", + " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", " True\n", " \n", " \n", " 10\n", - " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", - " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", + " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", + " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", " True\n", " \n", " \n", " 11\n", - " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", - " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", + " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", + " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", " True\n", " \n", " \n", @@ -390,35 +471,35 @@ ], "text/plain": [ " from \\\n", - "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... \n", - "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... \n", - "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... \n", - "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... \n", - "4 HybridTopologySetupUnit-8327cc87d598469b8766a6... \n", - "5 HybridTopologyMultiStateSimulationUnit-70fe09c... \n", - "6 HybridTopologySetupUnit-8e920b2462ec4acba3e385... \n", - "7 HybridTopologyMultiStateSimulationUnit-b3a19f6... \n", - "8 HybridTopologySetupUnit-02f2da60546f40bdb07787... \n", - "9 HybridTopologyMultiStateSimulationUnit-d27bd1a... \n", - "10 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... \n", - "11 HybridTopologyMultiStateSimulationUnit-bfa5ad9... \n", + "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... \n", + "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... \n", + "2 HybridTopologySetupUnit-f645288db5164800ab84fa... \n", + "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... \n", + "4 HybridTopologySetupUnit-953a4b92b4c44425bb647e... \n", + "5 HybridTopologyMultiStateSimulationUnit-d3871d9... \n", + "6 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... \n", + "7 HybridTopologyMultiStateSimulationUnit-19894f4... \n", + "8 HybridTopologySetupUnit-f645288db5164800ab84fa... \n", + "9 HybridTopologyMultiStateSimulationUnit-519c99f... \n", + "10 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... \n", + "11 HybridTopologyMultiStateSimulationUnit-bdee1f0... \n", "\n", " to blocking \n", - "0 HybridTopologyMultiStateSimulationUnit-70fe09c... True \n", - "1 HybridTopologyMultiStateSimulationUnit-b3a19f6... True \n", - "2 HybridTopologyMultiStateSimulationUnit-d27bd1a... True \n", - "3 HybridTopologyMultiStateSimulationUnit-bfa5ad9... True \n", - "4 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... True \n", - "5 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... True \n", - "6 HybridTopologyMultiStateAnalysisUnit-675f13a80... True \n", - "7 HybridTopologyMultiStateAnalysisUnit-675f13a80... True \n", - "8 HybridTopologyMultiStateAnalysisUnit-560fd27b0... True \n", - "9 HybridTopologyMultiStateAnalysisUnit-560fd27b0... True \n", - "10 HybridTopologyMultiStateAnalysisUnit-f468b25c2... True \n", - "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... True " + "0 HybridTopologyMultiStateSimulationUnit-d3871d9... True \n", + "1 HybridTopologyMultiStateSimulationUnit-19894f4... True \n", + "2 HybridTopologyMultiStateSimulationUnit-519c99f... True \n", + "3 HybridTopologyMultiStateSimulationUnit-bdee1f0... True \n", + "4 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... True \n", + "5 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... True \n", + "6 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... True \n", + "7 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... True \n", + "8 HybridTopologyMultiStateAnalysisUnit-bde91842f... True \n", + "9 HybridTopologyMultiStateAnalysisUnit-bde91842f... True \n", + "10 HybridTopologyMultiStateAnalysisUnit-41940d0c3... True \n", + "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... True " ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -433,48 +514,196 @@ "id": "2d376371-0160-40ac-ac6b-0e9e3fe80f97", "metadata": {}, "source": [ - "## use a Worker to run the jobs" + "## Execute tasks with a Worker\n", + "\n", + "A `Worker` needs the `Warehouse` and the path to the `TaskStatusDB`. Each call to `Worker.execute_unit`:\n", + "\n", + "1. checks out the next `AVAILABLE` task, marking it `IN_PROGRESS`;\n", + "2. loads the task's `ProtocolUnit`, and the results of any tasks it depends on, from the `Warehouse`;\n", + "3. runs the unit, using `scratch` for temporary files;\n", + "4. stores the result in the `Warehouse` and marks the task complete, unblocking any tasks that depend on it.\n", + "\n", + "It returns the task ID and its `ProtocolUnitResult`, or `None` if no task is available." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "a74e9960-8d17-4bc4-8069-6946d8cea370", "metadata": {}, "outputs": [], "source": [ "from openfe.orchestration import Worker\n", + "\n", "worker = Worker(wh, db_path)" ] }, + { + "cell_type": "markdown", + "id": "43e07db6-29ea-4033-9088-fe246ea8e803", + "metadata": {}, + "source": [ + "Now we run the four setup units (the four `AVAILABLE` tasks):" + ] + }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 10, "id": "17c2b502-6ece-45c9-af05-6678f896f7e4", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.4G (80.6%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d: 70% full (138.5G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Unable to select an available task\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Unable to select an available task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.0%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0: 70% full (138.5G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Unable to select an available task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (82.0%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788: 70% full (138.5G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788' as successfully completed\n", "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Unable to select an available task\n" + "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.9%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2: 70% full (138.5G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "None\n", - "None\n", - "None\n", - "None\n" + "('HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", + "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", + "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", + "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", + " warnings.warn(\"atom_indices are not monotonically increasing\")\n", + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2' as successfully completed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" ] } ], @@ -486,9 +715,17 @@ " print(exec_result)" ] }, + { + "cell_type": "markdown", + "id": "b7195df8-4808-4287-a925-e3c9c1dbb432", + "metadata": {}, + "source": [ + "Four setup unit are now `COMPLETED`, and the simulation units that depended on them have become `AVAILABLE`:" + ] + }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "e8ebb623-1a1f-4fa2-bf8d-8a732a75344c", "metadata": {}, "outputs": [ @@ -523,71 +760,71 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-8327cc87d598469b8766a6...\n", + " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", " COMPLETED\n", - " 2026-09-29 08:20:03.881418\n", + " 2026-09-30 10:48:40.483826\n", " 1\n", " 1\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-8e920b2462ec4acba3e385...\n", + " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", " COMPLETED\n", - " 2026-09-29 08:20:04.585753\n", + " 2026-09-30 10:48:45.666020\n", " 1\n", " 1\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-02f2da60546f40bdb07787...\n", + " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", " COMPLETED\n", - " 2026-09-29 08:20:05.051724\n", + " 2026-09-30 10:48:46.174758\n", " 1\n", " 1\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-3024c161ec2246c2b5b6c6...\n", + " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", " COMPLETED\n", - " 2026-09-29 08:20:10.138807\n", + " 2026-09-30 10:48:51.551296\n", " 1\n", " 1\n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-70fe09c...\n", + " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", " AVAILABLE\n", - " 2026-09-29 08:20:03.881566\n", + " 2026-09-30 10:48:40.484011\n", " 0\n", " 1\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-b3a19f6...\n", + " HybridTopologyMultiStateSimulationUnit-19894f4...\n", " AVAILABLE\n", - " 2026-09-29 08:20:04.585913\n", + " 2026-09-30 10:48:45.666145\n", " 0\n", " 1\n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-d27bd1a...\n", + " HybridTopologyMultiStateSimulationUnit-519c99f...\n", " AVAILABLE\n", - " 2026-09-29 08:20:05.051900\n", + " 2026-09-30 10:48:46.174914\n", " 0\n", " 1\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-bfa5ad9...\n", + " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", " AVAILABLE\n", - " 2026-09-29 08:20:10.138942\n", + " 2026-09-30 10:48:51.551421\n", " 0\n", " 1\n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-7c00ce5c5...\n", + " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -595,7 +832,7 @@ " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-675f13a80...\n", + " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -603,7 +840,7 @@ " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-560fd27b0...\n", + " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -611,7 +848,7 @@ " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-f468b25c2...\n", + " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -623,35 +860,404 @@ ], "text/plain": [ " taskid status \\\n", - "0 HybridTopologySetupUnit-8327cc87d598469b8766a6... COMPLETED \n", - "1 HybridTopologySetupUnit-8e920b2462ec4acba3e385... COMPLETED \n", - "2 HybridTopologySetupUnit-02f2da60546f40bdb07787... COMPLETED \n", - "3 HybridTopologySetupUnit-3024c161ec2246c2b5b6c6... COMPLETED \n", - "4 HybridTopologyMultiStateSimulationUnit-70fe09c... AVAILABLE \n", - "5 HybridTopologyMultiStateSimulationUnit-b3a19f6... AVAILABLE \n", - "6 HybridTopologyMultiStateSimulationUnit-d27bd1a... AVAILABLE \n", - "7 HybridTopologyMultiStateSimulationUnit-bfa5ad9... AVAILABLE \n", - "8 HybridTopologyMultiStateAnalysisUnit-7c00ce5c5... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-675f13a80... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-560fd27b0... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-f468b25c2... BLOCKED \n", + "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", + "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", + "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", + "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", + "4 HybridTopologyMultiStateSimulationUnit-d3871d9... AVAILABLE \n", + "5 HybridTopologyMultiStateSimulationUnit-19894f4... AVAILABLE \n", + "6 HybridTopologyMultiStateSimulationUnit-519c99f... AVAILABLE \n", + "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... AVAILABLE \n", + "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", "\n", " last_modified tries max_tries \n", - "0 2026-09-29 08:20:03.881418 1 1 \n", - "1 2026-09-29 08:20:04.585753 1 1 \n", - "2 2026-09-29 08:20:05.051724 1 1 \n", - "3 2026-09-29 08:20:10.138807 1 1 \n", - "4 2026-09-29 08:20:03.881566 0 1 \n", - "5 2026-09-29 08:20:04.585913 0 1 \n", - "6 2026-09-29 08:20:05.051900 0 1 \n", - "7 2026-09-29 08:20:10.138942 0 1 \n", + "0 2026-09-30 10:48:40.483826 1 1 \n", + "1 2026-09-30 10:48:45.666020 1 1 \n", + "2 2026-09-30 10:48:46.174758 1 1 \n", + "3 2026-09-30 10:48:51.551296 1 1 \n", + "4 2026-09-30 10:48:40.484011 0 1 \n", + "5 2026-09-30 10:48:45.666145 0 1 \n", + "6 2026-09-30 10:48:46.174914 0 1 \n", + "7 2026-09-30 10:48:51.551421 0 1 \n", "8 NaT 0 1 \n", "9 NaT 0 1 \n", "10 NaT 0 1 \n", "11 NaT 0 1 " ] }, - "execution_count": 10, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df=get_task_df(task_db)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "2e6f9c68-98b0-4e58-aaeb-d56fee3c4f13", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.3%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685: 70% full (135.7G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:Starting simulation unit\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openfe/protocols/openmm_utils/omm_compute.py:78: UserWarning: Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", + " warnings.warn(wmsg)\n", + "WARNING:root:Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", + "WARNING:openmmtools.multistate.multistatereporter:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", + "WARNING:openmmtools.multistate.multistatesampler:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:minimizing systems\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please cite the following:\n", + "\n", + " Friedrichs MS, Eastman P, Vaidyanathan V, Houston M, LeGrand S, Beberg AL, Ensign DL, Bruns CM, and Pande VS. Accelerating molecular dynamic simulations on graphics processing unit. J. Comput. Chem. 30:864, 2009. DOI: 10.1002/jcc.21209\n", + " Eastman P and Pande VS. OpenMM: A hardware-independent framework for molecular simulations. Comput. Sci. Eng. 12:34, 2010. DOI: 10.1109/MCSE.2010.27\n", + " Eastman P and Pande VS. Efficient nonbonded interactions for molecular dynamics on a graphics processing unit. J. Comput. Chem. 31:1268, 2010. DOI: 10.1002/jcc.21413\n", + " Eastman P and Pande VS. Constant constraint matrix approximation: A robust, parallelizable constraint method for molecular simulations. J. Chem. Theor. Comput. 6:434, 2010. DOI: 10.1021/ct900463w\n", + " Chodera JD and Shirts MR. Replica exchange and expanded ensemble simulations as Gibbs multistate: Simple improvements for enhanced mixing. J. Chem. Phys., 135:194110, 2011. DOI:10.1063/1.3660669\n", + " \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:equilibrating systems\n", + "INFO:openmmtools.multistate.multistatesampler:Equilibration iteration 1/5\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openmmtools/mcmc.py:723: UserWarning: Particle coordinate is NaN. For more information, see https://github.com/openmm/openmm/wiki/Frequently-Asked-Questions#nan\n", + " warnings.warn(str(e))\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 0 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 1 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 2 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 3 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 4 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 5 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 6 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 7 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 8 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 9 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 10 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 11 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 12 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 13 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 14 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 15 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 16 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 17 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 18 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "ERROR:openmmtools.mcmc:Potential energy is NaN after 19 attempts of integration with move LangevinDynamicsMove Trying to reinitialize Context as a last-resort restart attempt...\n", + "ERROR:openmmtools.mcmc:Potential energy is NaN after 20 attempts of integration with move LangevinDynamicsMove\n", + "CRITICAL:openmmtools.multistate.multistatesampler:Propagating replica 0 at state 0 resulted in a NaN!\n", + "The state of the system and integrator before the error were saved in /Users/hannahbaumann/ExampleNotebooks/execution/warehouse_mcl1/shared/task_workdirs/HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685/nan-error-logs\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685 as failed.\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Selected task 'HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955'\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685 succeeded: False\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", + "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.8%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955: 70% full (136.7G free)\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:Starting simulation unit\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openfe/protocols/openmm_utils/omm_compute.py:78: UserWarning: Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", + " warnings.warn(wmsg)\n", + "WARNING:root:Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", + "WARNING:openmmtools.multistate.multistatereporter:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", + "WARNING:openmmtools.multistate.multistatesampler:Warning: The openmmtools.multistate API is experimental and may change in future releases\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please cite the following:\n", + "\n", + " Friedrichs MS, Eastman P, Vaidyanathan V, Houston M, LeGrand S, Beberg AL, Ensign DL, Bruns CM, and Pande VS. Accelerating molecular dynamic simulations on graphics processing unit. J. Comput. Chem. 30:864, 2009. DOI: 10.1002/jcc.21209\n", + " Eastman P and Pande VS. OpenMM: A hardware-independent framework for molecular simulations. Comput. Sci. Eng. 12:34, 2010. DOI: 10.1109/MCSE.2010.27\n", + " Eastman P and Pande VS. Efficient nonbonded interactions for molecular dynamics on a graphics processing unit. J. Comput. Chem. 31:1268, 2010. DOI: 10.1002/jcc.21413\n", + " Eastman P and Pande VS. Constant constraint matrix approximation: A robust, parallelizable constraint method for molecular simulations. J. Chem. Theor. Comput. 6:434, 2010. DOI: 10.1021/ct900463w\n", + " Chodera JD and Shirts MR. Replica exchange and expanded ensemble simulations as Gibbs multistate: Simple improvements for enhanced mixing. J. Chem. Phys., 135:194110, 2011. DOI:10.1063/1.3660669\n", + " \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:minimizing systems\n", + "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:equilibrating systems\n", + "INFO:openmmtools.multistate.multistatesampler:Equilibration iteration 1/5\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openmmtools/mcmc.py:723: UserWarning: Particle coordinate is NaN. For more information, see https://github.com/openmm/openmm/wiki/Frequently-Asked-Questions#nan\n", + " warnings.warn(str(e))\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 0 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 1 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 2 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 3 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 4 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 5 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 6 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 7 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 8 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 9 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 10 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 11 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 12 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 13 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 14 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 15 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 16 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 17 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "WARNING:openmmtools.mcmc:Potential energy is NaN after 18 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", + "ERROR:openmmtools.mcmc:Potential energy is NaN after 19 attempts of integration with move LangevinDynamicsMove Trying to reinitialize Context as a last-resort restart attempt...\n", + "ERROR:openmmtools.mcmc:Potential energy is NaN after 20 attempts of integration with move LangevinDynamicsMove\n", + "CRITICAL:openmmtools.multistate.multistatesampler:Propagating replica 1 at state 1 resulted in a NaN!\n", + "The state of the system and integrator before the error were saved in /Users/hannahbaumann/ExampleNotebooks/execution/warehouse_mcl1/shared/task_workdirs/HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955/nan-error-logs\n", + "INFO:exorcist.taskdb:Marking try of HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955 as failed.\n", + "INFO:exorcist.taskdb:Checking out a new task\n", + "INFO:exorcist.taskdb:Unable to select an available task\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955 succeeded: False\n" + ] + } + ], + "source": [ + "while True:\n", + " execution = worker.execute_unit(scratch=\"scratch\")\n", + " if execution is None:\n", + " break\n", + " taskid, result = execution\n", + " print(f\"{taskid} succeeded: {result.ok()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "0c480bc5-5900-412c-addf-da8acfb80c04", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
taskidstatuslast_modifiedtriesmax_tries
0HybridTopologySetupUnit-953a4b92b4c44425bb647e...COMPLETED2026-09-30 10:48:40.48382611
1HybridTopologySetupUnit-b5cc67648c434ceca4e69e...COMPLETED2026-09-30 10:48:45.66602011
2HybridTopologySetupUnit-f645288db5164800ab84fa...COMPLETED2026-09-30 10:48:46.17475811
3HybridTopologySetupUnit-eaab94ae3e8b4978a55711...COMPLETED2026-09-30 10:48:51.55129611
4HybridTopologyMultiStateSimulationUnit-d3871d9...COMPLETED2026-09-30 11:18:06.72868011
5HybridTopologyMultiStateSimulationUnit-19894f4...COMPLETED2026-09-30 11:22:18.85333711
6HybridTopologyMultiStateSimulationUnit-519c99f...TOO_MANY_RETRIES2026-09-30 14:52:02.58202755
7HybridTopologyMultiStateSimulationUnit-bdee1f0...TOO_MANY_RETRIES2026-09-30 14:53:08.23121055
8HybridTopologyMultiStateAnalysisUnit-aaa8037c1...COMPLETED2026-09-30 11:24:05.75043511
9HybridTopologyMultiStateAnalysisUnit-e193ef5e5...COMPLETED2026-09-30 11:24:26.25636911
10HybridTopologyMultiStateAnalysisUnit-bde91842f...BLOCKEDNaT01
11HybridTopologyMultiStateAnalysisUnit-41940d0c3...BLOCKEDNaT01
\n", + "
" + ], + "text/plain": [ + " taskid status \\\n", + "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", + "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", + "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", + "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", + "4 HybridTopologyMultiStateSimulationUnit-d3871d9... COMPLETED \n", + "5 HybridTopologyMultiStateSimulationUnit-19894f4... COMPLETED \n", + "6 HybridTopologyMultiStateSimulationUnit-519c99f... TOO_MANY_RETRIES \n", + "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... TOO_MANY_RETRIES \n", + "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... COMPLETED \n", + "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... COMPLETED \n", + "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", + "\n", + " last_modified tries max_tries \n", + "0 2026-09-30 10:48:40.483826 1 1 \n", + "1 2026-09-30 10:48:45.666020 1 1 \n", + "2 2026-09-30 10:48:46.174758 1 1 \n", + "3 2026-09-30 10:48:51.551296 1 1 \n", + "4 2026-09-30 11:18:06.728680 1 1 \n", + "5 2026-09-30 11:22:18.853337 1 1 \n", + "6 2026-09-30 14:52:02.582027 5 5 \n", + "7 2026-09-30 14:53:08.231210 5 5 \n", + "8 2026-09-30 11:24:05.750435 1 1 \n", + "9 2026-09-30 11:24:26.256369 1 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " + ] + }, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -666,42 +1272,717 @@ "id": "2bd7c48e-2098-4bc2-a093-d4d34018b42f", "metadata": {}, "source": [ - "## Load results \n", - "(cooking show magic)\n", + "## Gather results\n", + "\n", + "The `Warehouse` now contains a `ProtocolUnitResult` for every completed task. `gather_all_results` reassembles these into one `(ProtocolResult, ProtocolDAGResult)` pair per `ProtocolDAG`.\n", + "\n", + "Because each `ProtocolDAG` corresponds to one `Transformation`, these are per-leg free energies (the complex or the solvent leg of an edge), not relative binding free energies. See below for combining them.\n", + "\n", + "You can load an existing `Warehouse` from any session with `FileSystemWarehouse.from_dir`:\n", "\n", "**TODO: rerun to get results with 3 repeats per edge, upload to zenodo**" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 31, "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", - "metadata": {}, - "outputs": [], + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" + ] + } + ], "source": [ - "# load a different warehouse\n", + "# load a warehouse\n", "from openfe.storage.warehouse import FileSystemWarehouse\n", - "# other_wh = FileSystemWarehouse.from_dir(warehouse_dir)" + "\n", + "results_wh = FileSystemWarehouse.from_dir(warehouse_dir)\n", + "result_edges = results_wh.gather_all_results()" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 32, "id": "3204e27c-b3b4-4997-8cac-b0932cfa6ccb", - "metadata": {}, - "outputs": [], + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" + ] + } + ], "source": [ - "# result_edges = other_wh.gather_all_results();" + "result_edges = results_wh.gather_all_results();" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 33, "id": "e1e1314a-6ef8-453d-b70f-19123ab98307", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[(,\n", + " ),\n", + " (,\n", + " ),\n", + " (,\n", + " ),\n", + " (,\n", + " )]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# result_edges" + "result_edges" ] }, { @@ -717,7 +1998,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be1c25cb-b3e0-41d1-9cd3-a84b5b8820c8", + "id": "afc85302-bb60-4649-bd1f-417303dde1dd", "metadata": {}, "outputs": [], "source": [] @@ -739,7 +2020,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.7" + "version": "3.13.14" } }, "nbformat": 4, From 7d246abf91e00b00fdbb0484e51588a3e35cb0c6 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Fri, 2 Oct 2026 14:04:08 +0200 Subject: [PATCH 13/16] More tutorial updates --- .../task_based_execution_python_api.ipynb | 1755 ++++++----------- 1 file changed, 598 insertions(+), 1157 deletions(-) diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index 6fc0344..8b71843 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -2,20 +2,40 @@ "cells": [ { "cell_type": "markdown", - "id": "dfffe446-14c0-4dea-92ea-0b9f862fdec6", + "id": "94c92c63-6b20-403b-9654-56bf1c6bc1d4", "metadata": {}, "source": [ "# Task-Based Execution with the Python API\n", "\n", - "With `openfe quickrun`, you execute a specific `Transformation` at a time. Task-based execution instead takes a whole `AlchemicalNetwork`, breaks it into `tasks`, and lets one or more workers pick up whichever tasks are ready to run. Each task is a single `ProtocolUnit`, for example the setup, simulation or analysis step of one repeat of one `Transformation`.\n", + "With `openfe quickrun`, you choose and execute a specific `Transformation`.\n", + "Task-based execution moves the orchestration into OpenFE: you provide an entire\n", + "`AlchemicalNetwork`, OpenFE breaks it into dependent tasks, and one or more\n", + "workers claim tasks as soon as they are ready to run.\n", "\n", - "Three objects do the work:\n", + "A **task** is a single `ProtocolUnit`, for example the setup, simulation, or\n", + "analysis step of one repeat of one `Transformation`.\n", "\n", - "- the **`Warehouse`** stores everything needed to run the campaign (the network, every task) and every result produced;\n", - "- the **`TaskStatusDB`** tracks the status of each task and the dependencies between them;\n", - "- a **`Worker`** executes task from the task database.\n", + "Three objects make up a task-based campaign:\n", "\n", - "This tutorial walks through a complete campaign with the Python API. For the equivalent command-line workflow, see the [Task-based Execution page of the OpenFE user guide](https://openfe--2113.org.readthedocs.build/en/2113/guide/execution/task_based_execution.html)." + "- the **`Warehouse`** stores the campaign data needed for execution, including\n", + " the `AlchemicalNetwork`, tasks, and results;\n", + "- the **`TaskStatusDB`** tracks task status and dependencies;\n", + "- a **`Worker`** claims an available task, executes it, and stores its result.\n", + "\n", + "Separating campaign data, orchestration state, and execution allows the same\n", + "campaign to be executed by multiple workers and across multiple processes.\n", + "\n", + "This tutorial walks through a task-based campaign using the Python API.\n", + "For the equivalent command-line workflow, see the\n", + "[Task-based Execution section of the OpenFE user guide](https://docs.openfree.energy/en/latest/guide/execution/task_based_execution.html)." + ] + }, + { + "cell_type": "markdown", + "id": "7cb59b18-0873-4f53-ac93-c6283b49aa6b", + "metadata": {}, + "source": [ + "## \"Drawing\"" ] }, { @@ -25,19 +45,30 @@ "metadata": {}, "outputs": [], "source": [ + "from pathlib import Path\n", + "\n", "import openfe" ] }, { "cell_type": "markdown", - "id": "0a2035c9-8e0f-454e-9189-be3e41ae57f6", + "id": "dc689359-a09d-4547-8e0f-cd488f11a260", "metadata": {}, "source": [ "## Load an AlchemicalNetwork\n", "\n", - "The input to a task-based campaign is an `AlchemicalNetwork`. If you don't have one yet, see the [Create an `AlchemicalNetwork` cookbook](https://docs.openfree.energy/en/stable/cookbook/create_alchemical_network.html), or add `--networks-only` to an `openfe plan-rbfe-network` call.\n", + "The input to a task-based campaign is an `AlchemicalNetwork`. If you don't\n", + "have one yet, see the\n", + "[Create an `AlchemicalNetwork` cookbook](https://docs.openfree.energy/en/stable/cookbook/create_alchemical_network.html),\n", + "or add `--networks-only` to an `openfe plan-rbfe-network` call.\n", + "\n", + "Here we use a small MCL-1 network with pre-charged ligands and two edges,\n", + "`ligand_1 → ligand_2` and `ligand_2 → ligand_3`. Each edge has a complex and\n", + "a solvent leg, giving four `Transformation`s.\n", "\n", - "Here we use a small MCL-1 network with pre-charged ligands and two edges, `ligand_1 → ligand_2` and `ligand_2 → ligand_3`. Each edge has a complex and a solvent leg, giving four `Transformations`. " + "For this example, each `Transformation` has one repeat. Each repeat of the\n", + "hybrid-topology protocol consists of setup, simulation, and analysis units,\n", + "so the campaign will contain 12 tasks in total." ] }, { @@ -52,25 +83,32 @@ }, { "cell_type": "markdown", - "id": "8c3439c8-02d7-4d6b-ad70-a3162c798ca2", + "id": "aa04b848-6e4c-435b-a001-cb7046056b32", "metadata": {}, "source": [ "## Set up the campaign\n", "\n", - "We use `setup_task_campaign` to create a task database and Warehouse from an `AlchemicalNetwork`. The Warehouse stores the `AlchemicalNetwork` and every `ProtocolUnit` of every `ProtocolDAG` as a task. \n", - "The `TaskStatusDB` containes each task and its dependencies.\n", + "`setup_task_campaign` turns the `AlchemicalNetwork` into the persistent state\n", + "needed for task-based execution:\n", + "\n", + "- a **Warehouse**, which stores the network, tasks, DAG information, shared\n", + " files, and results;\n", + "- a **TaskStatusDB**, which stores task status and dependency information.\n", + "\n", + "This is equivalent to\n", "\n", - "This is equivalent to `openfe setup-task-campaign --alchemical-network alchemicalNetwork_mc1_small.json` on the command line." + "`openfe setup-task-campaign --alchemical-network alchemicalNetwork_mc1_small.json`\n", + "\n", + "on the command line." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "4080f228-4603-432b-b64f-c632f2c8e52c", "metadata": {}, "outputs": [], "source": [ - "# build a database of tasks from the AlchemicalNetwork\n", "from openfe.orchestration import setup_task_campaign\n", "\n", "campaign_name = \"mcl1\"\n", @@ -80,29 +118,28 @@ "task_db, wh = setup_task_campaign(\n", " alchemical_network=alchemical_network,\n", " warehouse_dir=warehouse_dir,\n", - " db_path=db_path\n", + " db_path=db_path,\n", ")" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "0467cf6a-0363-4caf-beb4-53c5dd9b1e1d", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "TaskStatusDB(engine=Engine(sqlite:///tasks_mcl1.db))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Warehouse: warehouse_mcl1\n", + "Task database: tasks_mcl1.db\n" + ] } ], "source": [ - "task_db" + "print(f\"Warehouse: {warehouse_dir}\")\n", + "print(f\"Task database: {db_path}\")" ] }, { @@ -112,33 +149,37 @@ "source": [ "### The Warehouse\n", "\n", - "The `Warehouse` is a directory holding several stores: `setup` (the `AlchemicalNetwork` and its individual components), `tasks` (the `ProtocolUnit`s), `protocol_dags` (used to reassemble results later), `results` (every `ProtocolUnitResult`) and `shared` (files passed between units of the same `Transformation`)." + "The `Warehouse` stores the data required by the campaign. Its directory contains\n", + "separate stores for:\n", + "\n", + "- `setup`: the `AlchemicalNetwork` and its components;\n", + "- `tasks`: the `ProtocolUnit`s that workers execute;\n", + "- `protocol_dags`: information used to reconstruct DAG-level results;\n", + "- `results`: completed `ProtocolUnitResult`s;\n", + "- `shared`: files passed between related protocol units.\n", + "\n", + "These files and folders should **not** be modified by the user." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "id": "92303612-ffd6-4081-9a47-6bbe0f9cabef", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34mprotocol_dags\u001b[m\u001b[m \u001b[34mresults\u001b[m\u001b[m \u001b[34msetup\u001b[m\u001b[m \u001b[34mshared\u001b[m\u001b[m \u001b[34mtasks\u001b[m\u001b[m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=8068) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", - " pid, fd = os.forkpty()\n" - ] + "data": { + "text/plain": [ + "['protocol_dags', 'results', 'setup', 'shared', 'tasks']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "!ls warehouse_mcl1/" + "sorted(path.name for path in Path(warehouse_dir).iterdir())" ] }, { @@ -170,14 +211,25 @@ "source": [ "### The TaskStatusDB\n", "\n", - "The `TaskStatusDB` is an SQLite database. `get_task_df` returns its task table as a `pandas.DataFrame`, which is the same information shown by `openfe status`.\n", + "The `TaskStatusDB` stores the orchestration state of the campaign.\n", + "`get_task_df` returns the task table as a `pandas.DataFrame`, which is the same\n", + "information shown by `openfe status`.\n", + "\n", + "For this network, four `Transformation`s × three units per repeat gives\n", + "12 tasks.\n", "\n", - "Each hybrid topology `Transformation` has three units per repeat, so our four `Transformations` give 12 tasks. Only the setup units are `AVAILABLE`; everything else is `BLOCKED` until the tasks it depends on have completed." + "Initially, only the four setup units are `AVAILABLE`. The simulation and\n", + "analysis units are `BLOCKED` because their dependencies have not completed yet.\n", + "\n", + "As execution proceeds you will also see tasks become `IN_PROGRESS` and\n", + "`COMPLETED`. Failed execution can additionally produce error/retry-related\n", + "states such as `ERROR` and `TOO_MANY_RETRIES`. The `tries` and `max_tries`\n", + "columns track retry accounting." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "id": "419a05d8-bcb5-47f8-a2f9-74af8c6367e8", "metadata": {}, "outputs": [ @@ -212,71 +264,71 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", - " COMPLETED\n", - " 2026-09-30 10:48:40.483826\n", - " 1\n", + " HybridTopologySetupUnit-4d88abf044624bb8bc2108...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", - " COMPLETED\n", - " 2026-09-30 10:48:45.666020\n", - " 1\n", + " HybridTopologySetupUnit-c776227dd5334f9fb95c6c...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", - " COMPLETED\n", - " 2026-09-30 10:48:46.174758\n", - " 1\n", + " HybridTopologySetupUnit-dc2c746a5c35441b8a0949...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", - " COMPLETED\n", - " 2026-09-30 10:48:51.551296\n", - " 1\n", + " HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:40.484011\n", + " HybridTopologyMultiStateSimulationUnit-98ef047...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-19894f4...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:45.666145\n", + " HybridTopologyMultiStateSimulationUnit-4a2ed08...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-519c99f...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:46.174914\n", + " HybridTopologyMultiStateSimulationUnit-0d3bb8a...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:51.551421\n", + " HybridTopologyMultiStateSimulationUnit-3db9764...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", + " HybridTopologyMultiStateAnalysisUnit-7603a7e54...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -284,7 +336,7 @@ " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", + " HybridTopologyMultiStateAnalysisUnit-8f5fd47df...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -292,7 +344,7 @@ " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", + " HybridTopologyMultiStateAnalysisUnit-5c6253c0b...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -300,7 +352,7 @@ " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", + " HybridTopologyMultiStateAnalysisUnit-f8ba67cad...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -312,35 +364,35 @@ ], "text/plain": [ " taskid status \\\n", - "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", - "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", - "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", - "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", - "4 HybridTopologyMultiStateSimulationUnit-d3871d9... AVAILABLE \n", - "5 HybridTopologyMultiStateSimulationUnit-19894f4... AVAILABLE \n", - "6 HybridTopologyMultiStateSimulationUnit-519c99f... AVAILABLE \n", - "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... AVAILABLE \n", - "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", + "0 HybridTopologySetupUnit-4d88abf044624bb8bc2108... AVAILABLE \n", + "1 HybridTopologySetupUnit-c776227dd5334f9fb95c6c... AVAILABLE \n", + "2 HybridTopologySetupUnit-dc2c746a5c35441b8a0949... AVAILABLE \n", + "3 HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e... AVAILABLE \n", + "4 HybridTopologyMultiStateSimulationUnit-98ef047... BLOCKED \n", + "5 HybridTopologyMultiStateSimulationUnit-4a2ed08... BLOCKED \n", + "6 HybridTopologyMultiStateSimulationUnit-0d3bb8a... BLOCKED \n", + "7 HybridTopologyMultiStateSimulationUnit-3db9764... BLOCKED \n", + "8 HybridTopologyMultiStateAnalysisUnit-7603a7e54... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-8f5fd47df... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-5c6253c0b... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-f8ba67cad... BLOCKED \n", "\n", - " last_modified tries max_tries \n", - "0 2026-09-30 10:48:40.483826 1 1 \n", - "1 2026-09-30 10:48:45.666020 1 1 \n", - "2 2026-09-30 10:48:46.174758 1 1 \n", - "3 2026-09-30 10:48:51.551296 1 1 \n", - "4 2026-09-30 10:48:40.484011 0 1 \n", - "5 2026-09-30 10:48:45.666145 0 1 \n", - "6 2026-09-30 10:48:46.174914 0 1 \n", - "7 2026-09-30 10:48:51.551421 0 1 \n", - "8 NaT 0 1 \n", - "9 NaT 0 1 \n", - "10 NaT 0 1 \n", - "11 NaT 0 1 " + " last_modified tries max_tries \n", + "0 NaT 0 1 \n", + "1 NaT 0 1 \n", + "2 NaT 0 1 \n", + "3 NaT 0 1 \n", + "4 NaT 0 1 \n", + "5 NaT 0 1 \n", + "6 NaT 0 1 \n", + "7 NaT 0 1 \n", + "8 NaT 0 1 \n", + "9 NaT 0 1 \n", + "10 NaT 0 1 \n", + "11 NaT 0 1 " ] }, - "execution_count": 13, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -348,7 +400,7 @@ "source": [ "from openfe.orchestration import get_task_df, get_dependency_df\n", "\n", - "task_df = get_task_df(task_db);\n", + "task_df = get_task_df(task_db)\n", "task_df " ] }, @@ -357,7 +409,12 @@ "id": "ded36e59-73d5-4bca-8ce0-0c916cdf8471", "metadata": {}, "source": [ - "`get_dependency_df` shows the dependencies between tasks: the task in `from` must complete before the task in `to` can run. Each simulation unit depends on its setup unit, and each analysis unit depends on both." + "`get_dependency_df` shows how tasks depend on one another. Read each row as:\n", + "the task in `from` must complete before the task in `to` can run.\n", + "\n", + "Each simulation unit depends on its corresponding setup unit. Each analysis\n", + "unit depends on the setup and simulation results required for that\n", + "`Transformation`." ] }, { @@ -395,74 +452,74 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", - " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", + " HybridTopologySetupUnit-4d88abf044624bb8bc2108...\n", + " HybridTopologyMultiStateSimulationUnit-98ef047...\n", " True\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", - " HybridTopologyMultiStateSimulationUnit-19894f4...\n", + " HybridTopologySetupUnit-c776227dd5334f9fb95c6c...\n", + " HybridTopologyMultiStateSimulationUnit-4a2ed08...\n", " True\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", - " HybridTopologyMultiStateSimulationUnit-519c99f...\n", + " HybridTopologySetupUnit-dc2c746a5c35441b8a0949...\n", + " HybridTopologyMultiStateSimulationUnit-0d3bb8a...\n", " True\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", - " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", + " HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e...\n", + " HybridTopologyMultiStateSimulationUnit-3db9764...\n", " True\n", " \n", " \n", " 4\n", - " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", - " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", + " HybridTopologySetupUnit-4d88abf044624bb8bc2108...\n", + " HybridTopologyMultiStateAnalysisUnit-7603a7e54...\n", " True\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", - " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", + " HybridTopologyMultiStateSimulationUnit-98ef047...\n", + " HybridTopologyMultiStateAnalysisUnit-7603a7e54...\n", " True\n", " \n", " \n", " 6\n", - " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", - " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", + " HybridTopologySetupUnit-c776227dd5334f9fb95c6c...\n", + " HybridTopologyMultiStateAnalysisUnit-8f5fd47df...\n", " True\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-19894f4...\n", - " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", + " HybridTopologyMultiStateSimulationUnit-4a2ed08...\n", + " HybridTopologyMultiStateAnalysisUnit-8f5fd47df...\n", " True\n", " \n", " \n", " 8\n", - " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", - " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", + " HybridTopologySetupUnit-dc2c746a5c35441b8a0949...\n", + " HybridTopologyMultiStateAnalysisUnit-5c6253c0b...\n", " True\n", " \n", " \n", " 9\n", - " HybridTopologyMultiStateSimulationUnit-519c99f...\n", - " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", + " HybridTopologyMultiStateSimulationUnit-0d3bb8a...\n", + " HybridTopologyMultiStateAnalysisUnit-5c6253c0b...\n", " True\n", " \n", " \n", " 10\n", - " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", - " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", + " HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e...\n", + " HybridTopologyMultiStateAnalysisUnit-f8ba67cad...\n", " True\n", " \n", " \n", " 11\n", - " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", - " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", + " HybridTopologyMultiStateSimulationUnit-3db9764...\n", + " HybridTopologyMultiStateAnalysisUnit-f8ba67cad...\n", " True\n", " \n", " \n", @@ -471,32 +528,32 @@ ], "text/plain": [ " from \\\n", - "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... \n", - "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... \n", - "2 HybridTopologySetupUnit-f645288db5164800ab84fa... \n", - "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... \n", - "4 HybridTopologySetupUnit-953a4b92b4c44425bb647e... \n", - "5 HybridTopologyMultiStateSimulationUnit-d3871d9... \n", - "6 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... \n", - "7 HybridTopologyMultiStateSimulationUnit-19894f4... \n", - "8 HybridTopologySetupUnit-f645288db5164800ab84fa... \n", - "9 HybridTopologyMultiStateSimulationUnit-519c99f... \n", - "10 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... \n", - "11 HybridTopologyMultiStateSimulationUnit-bdee1f0... \n", + "0 HybridTopologySetupUnit-4d88abf044624bb8bc2108... \n", + "1 HybridTopologySetupUnit-c776227dd5334f9fb95c6c... \n", + "2 HybridTopologySetupUnit-dc2c746a5c35441b8a0949... \n", + "3 HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e... \n", + "4 HybridTopologySetupUnit-4d88abf044624bb8bc2108... \n", + "5 HybridTopologyMultiStateSimulationUnit-98ef047... \n", + "6 HybridTopologySetupUnit-c776227dd5334f9fb95c6c... \n", + "7 HybridTopologyMultiStateSimulationUnit-4a2ed08... \n", + "8 HybridTopologySetupUnit-dc2c746a5c35441b8a0949... \n", + "9 HybridTopologyMultiStateSimulationUnit-0d3bb8a... \n", + "10 HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e... \n", + "11 HybridTopologyMultiStateSimulationUnit-3db9764... \n", "\n", " to blocking \n", - "0 HybridTopologyMultiStateSimulationUnit-d3871d9... True \n", - "1 HybridTopologyMultiStateSimulationUnit-19894f4... True \n", - "2 HybridTopologyMultiStateSimulationUnit-519c99f... True \n", - "3 HybridTopologyMultiStateSimulationUnit-bdee1f0... True \n", - "4 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... True \n", - "5 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... True \n", - "6 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... True \n", - "7 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... True \n", - "8 HybridTopologyMultiStateAnalysisUnit-bde91842f... True \n", - "9 HybridTopologyMultiStateAnalysisUnit-bde91842f... True \n", - "10 HybridTopologyMultiStateAnalysisUnit-41940d0c3... True \n", - "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... True " + "0 HybridTopologyMultiStateSimulationUnit-98ef047... True \n", + "1 HybridTopologyMultiStateSimulationUnit-4a2ed08... True \n", + "2 HybridTopologyMultiStateSimulationUnit-0d3bb8a... True \n", + "3 HybridTopologyMultiStateSimulationUnit-3db9764... True \n", + "4 HybridTopologyMultiStateAnalysisUnit-7603a7e54... True \n", + "5 HybridTopologyMultiStateAnalysisUnit-7603a7e54... True \n", + "6 HybridTopologyMultiStateAnalysisUnit-8f5fd47df... True \n", + "7 HybridTopologyMultiStateAnalysisUnit-8f5fd47df... True \n", + "8 HybridTopologyMultiStateAnalysisUnit-5c6253c0b... True \n", + "9 HybridTopologyMultiStateAnalysisUnit-5c6253c0b... True \n", + "10 HybridTopologyMultiStateAnalysisUnit-f8ba67cad... True \n", + "11 HybridTopologyMultiStateAnalysisUnit-f8ba67cad... True " ] }, "execution_count": 8, @@ -505,7 +562,7 @@ } ], "source": [ - "dep_df = get_dependency_df(task_db);\n", + "dep_df = get_dependency_df(task_db)\n", "dep_df" ] }, @@ -514,16 +571,23 @@ "id": "2d376371-0160-40ac-ac6b-0e9e3fe80f97", "metadata": {}, "source": [ - "## Execute tasks with a Worker\n", + "## Execute tasks with a `Worker`\n", + "\n", + "A `Worker` needs the `Warehouse` and the path to the `TaskStatusDB`.\n", + "\n", + "Each call to `Worker.execute_unit`:\n", "\n", - "A `Worker` needs the `Warehouse` and the path to the `TaskStatusDB`. Each call to `Worker.execute_unit`:\n", + "1. claims the next `AVAILABLE` task and marks it `IN_PROGRESS`;\n", + "2. loads its `ProtocolUnit` and any required upstream results from the\n", + " `Warehouse`;\n", + "3. executes the unit, using `scratch` for temporary working files;\n", + "4. stores the resulting execution data and updates the task status.\n", "\n", - "1. checks out the next `AVAILABLE` task, marking it `IN_PROGRESS`;\n", - "2. loads the task's `ProtocolUnit`, and the results of any tasks it depends on, from the `Warehouse`;\n", - "3. runs the unit, using `scratch` for temporary files;\n", - "4. stores the result in the `Warehouse` and marks the task complete, unblocking any tasks that depend on it.\n", + "After a successful task completes, the task database reevaluates its\n", + "dependencies and marks downstream tasks as `AVAILABLE`.\n", "\n", - "It returns the task ID and its `ProtocolUnitResult`, or `None` if no task is available." + "`execute_unit` returns information about the task it executed, or `None` when\n", + "there is no task available for that worker to claim." ] }, { @@ -543,68 +607,32 @@ "id": "43e07db6-29ea-4033-9088-fe246ea8e803", "metadata": {}, "source": [ - "Now we run the four setup units (the four `AVAILABLE` tasks):" + "### Execute one task\n", + "\n", + "Here, we will execute **one** task to see how the task graph changes.\n", + "\n", + "Notice that we do not ask the worker to execute a particular setup unit.\n", + "`Worker.execute_unit` claims whichever task the `TaskStatusDB` says is\n", + "available." ] }, { "cell_type": "code", "execution_count": 10, - "id": "17c2b502-6ece-45c9-af05-6678f896f7e4", - "metadata": { - "scrolled": true - }, + "id": "f5547758-2d7d-4fc2-b885-ef92afa00bf8", + "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", + "INFO:openfe.utils.system_probe.log.hostname:hostname: 'Mac.fritz.box'\n", "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.4G (80.6%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d: 70% full (138.5G free)\n", + "INFO:openfe.utils.system_probe.log:Memory used: 6.0G (76.9%)\n", + "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-4d88abf044624bb8bc210885408e6841: 69% full (140.9G free)\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([Cl])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d' as successfully completed\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.0%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0: 70% full (138.5G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-953a4b92b4c44425bb647eac913afc5d', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", @@ -616,117 +644,42 @@ "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0' as successfully completed\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (82.0%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788: 70% full (138.5G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-b5cc67648c434ceca4e69e89c195fcc0', ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788' as successfully completed\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.9%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2: 70% full (138.5G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Starting system setup unit\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologySetupUnit:Parameterizing systems\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-f645288db5164800ab84fa85c401f788', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][C]1=[C]([C](=[O])[O-])[S][c]2[c]([H])[c]([H])[c]([H])[c]([H])[c]21 using openff-2.2.1\n", - "INFO:openmmforcefields.generators.template_generators:Requested to generate parameters for residue \n", - "INFO:openmmforcefields.generators.template_generators:Generating a residue template for [H][c]1[c]([H])[c]([H])[c]2[c]([c]1[H])[S][C]([C](=[O])[O-])=[C]2[Cl] using openff-2.2.1\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Creating hybrid system\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Setting force field terms\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Adding forces\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:No CMAPTorsionForce found. Skipping adding force.\n", - "INFO:openfe.protocols.openmm_rfe._rfe_utils.relative:Hybrid system created\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/mdtraj/core/topology.py:97: UserWarning: atom_indices are not monotonically increasing\n", - " warnings.warn(\"atom_indices are not monotonically increasing\")\n", - "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2' as successfully completed\n" + "INFO:exorcist.taskdb:Marking task 'HybridTopologySetupUnit-4d88abf044624bb8bc210885408e6841' as successfully completed\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "('HybridTopologySetupUnit-eaab94ae3e8b4978a55711953dd3a9c2', ProtocolUnitResult(HybridTopology Setup: ligand_1 to ligand_2 repeat 0 generation 0))\n" - ] + "data": { + "text/plain": [ + "('HybridTopologySetupUnit-4d88abf044624bb8bc210885408e6841',\n", + " ProtocolUnitResult(HybridTopology Setup: ligand_2 to ligand_3 repeat 0 generation 0))" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# run this cell to execute units and show the result of the unit\n", - "n_submissions = 4\n", - "for _ in range(n_submissions):\n", - " exec_result = worker.execute_unit(scratch='scratch')\n", - " print(exec_result)" + "exec_result = worker.execute_unit(scratch=\"scratch\")\n", + "exec_result" ] }, { "cell_type": "markdown", - "id": "b7195df8-4808-4287-a925-e3c9c1dbb432", + "id": "c9b25794-ee22-41c1-92ff-a9822001ec29", "metadata": {}, "source": [ - "Four setup unit are now `COMPLETED`, and the simulation units that depended on them have become `AVAILABLE`:" + "After the setup task completes, inspect the task database again.\n", + "\n", + "The completed setup unit is now `COMPLETED`. Its corresponding simulation unit\n", + "has changed from `BLOCKED` to `AVAILABLE`, while unrelated tasks retain their\n", + "previous state." ] }, { "cell_type": "code", "execution_count": 11, - "id": "e8ebb623-1a1f-4fa2-bf8d-8a732a75344c", + "id": "88940e01-220a-4999-b016-2bb1b68c5376", "metadata": {}, "outputs": [ { @@ -760,71 +713,71 @@ " \n", " \n", " 0\n", - " HybridTopologySetupUnit-953a4b92b4c44425bb647e...\n", + " HybridTopologySetupUnit-4d88abf044624bb8bc2108...\n", " COMPLETED\n", - " 2026-09-30 10:48:40.483826\n", + " 2026-10-02 14:01:05.000137\n", " 1\n", " 1\n", " \n", " \n", " 1\n", - " HybridTopologySetupUnit-b5cc67648c434ceca4e69e...\n", - " COMPLETED\n", - " 2026-09-30 10:48:45.666020\n", - " 1\n", + " HybridTopologySetupUnit-c776227dd5334f9fb95c6c...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 2\n", - " HybridTopologySetupUnit-f645288db5164800ab84fa...\n", - " COMPLETED\n", - " 2026-09-30 10:48:46.174758\n", - " 1\n", + " HybridTopologySetupUnit-dc2c746a5c35441b8a0949...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 3\n", - " HybridTopologySetupUnit-eaab94ae3e8b4978a55711...\n", - " COMPLETED\n", - " 2026-09-30 10:48:51.551296\n", - " 1\n", + " HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e...\n", + " AVAILABLE\n", + " NaT\n", + " 0\n", " 1\n", " \n", " \n", " 4\n", - " HybridTopologyMultiStateSimulationUnit-d3871d9...\n", + " HybridTopologyMultiStateSimulationUnit-98ef047...\n", " AVAILABLE\n", - " 2026-09-30 10:48:40.484011\n", + " 2026-10-02 14:01:05.000274\n", " 0\n", " 1\n", " \n", " \n", " 5\n", - " HybridTopologyMultiStateSimulationUnit-19894f4...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:45.666145\n", + " HybridTopologyMultiStateSimulationUnit-4a2ed08...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 6\n", - " HybridTopologyMultiStateSimulationUnit-519c99f...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:46.174914\n", + " HybridTopologyMultiStateSimulationUnit-0d3bb8a...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 7\n", - " HybridTopologyMultiStateSimulationUnit-bdee1f0...\n", - " AVAILABLE\n", - " 2026-09-30 10:48:51.551421\n", + " HybridTopologyMultiStateSimulationUnit-3db9764...\n", + " BLOCKED\n", + " NaT\n", " 0\n", " 1\n", " \n", " \n", " 8\n", - " HybridTopologyMultiStateAnalysisUnit-aaa8037c1...\n", + " HybridTopologyMultiStateAnalysisUnit-7603a7e54...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -832,7 +785,7 @@ " \n", " \n", " 9\n", - " HybridTopologyMultiStateAnalysisUnit-e193ef5e5...\n", + " HybridTopologyMultiStateAnalysisUnit-8f5fd47df...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -840,7 +793,7 @@ " \n", " \n", " 10\n", - " HybridTopologyMultiStateAnalysisUnit-bde91842f...\n", + " HybridTopologyMultiStateAnalysisUnit-5c6253c0b...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -848,7 +801,7 @@ " \n", " \n", " 11\n", - " HybridTopologyMultiStateAnalysisUnit-41940d0c3...\n", + " HybridTopologyMultiStateAnalysisUnit-f8ba67cad...\n", " BLOCKED\n", " NaT\n", " 0\n", @@ -860,28 +813,28 @@ ], "text/plain": [ " taskid status \\\n", - "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", - "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", - "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", - "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", - "4 HybridTopologyMultiStateSimulationUnit-d3871d9... AVAILABLE \n", - "5 HybridTopologyMultiStateSimulationUnit-19894f4... AVAILABLE \n", - "6 HybridTopologyMultiStateSimulationUnit-519c99f... AVAILABLE \n", - "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... AVAILABLE \n", - "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... BLOCKED \n", - "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... BLOCKED \n", - "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", + "0 HybridTopologySetupUnit-4d88abf044624bb8bc2108... COMPLETED \n", + "1 HybridTopologySetupUnit-c776227dd5334f9fb95c6c... AVAILABLE \n", + "2 HybridTopologySetupUnit-dc2c746a5c35441b8a0949... AVAILABLE \n", + "3 HybridTopologySetupUnit-fceb0f5ee8a24788b9b33e... AVAILABLE \n", + "4 HybridTopologyMultiStateSimulationUnit-98ef047... AVAILABLE \n", + "5 HybridTopologyMultiStateSimulationUnit-4a2ed08... BLOCKED \n", + "6 HybridTopologyMultiStateSimulationUnit-0d3bb8a... BLOCKED \n", + "7 HybridTopologyMultiStateSimulationUnit-3db9764... BLOCKED \n", + "8 HybridTopologyMultiStateAnalysisUnit-7603a7e54... BLOCKED \n", + "9 HybridTopologyMultiStateAnalysisUnit-8f5fd47df... BLOCKED \n", + "10 HybridTopologyMultiStateAnalysisUnit-5c6253c0b... BLOCKED \n", + "11 HybridTopologyMultiStateAnalysisUnit-f8ba67cad... BLOCKED \n", "\n", " last_modified tries max_tries \n", - "0 2026-09-30 10:48:40.483826 1 1 \n", - "1 2026-09-30 10:48:45.666020 1 1 \n", - "2 2026-09-30 10:48:46.174758 1 1 \n", - "3 2026-09-30 10:48:51.551296 1 1 \n", - "4 2026-09-30 10:48:40.484011 0 1 \n", - "5 2026-09-30 10:48:45.666145 0 1 \n", - "6 2026-09-30 10:48:46.174914 0 1 \n", - "7 2026-09-30 10:48:51.551421 0 1 \n", + "0 2026-10-02 14:01:05.000137 1 1 \n", + "1 NaT 0 1 \n", + "2 NaT 0 1 \n", + "3 NaT 0 1 \n", + "4 2026-10-02 14:01:05.000274 0 1 \n", + "5 NaT 0 1 \n", + "6 NaT 0 1 \n", + "7 NaT 0 1 \n", "8 NaT 0 1 \n", "9 NaT 0 1 \n", "10 NaT 0 1 \n", @@ -894,738 +847,157 @@ } ], "source": [ - "df=get_task_df(task_db)\n", - "df" + "task_df = get_task_df(task_db)\n", + "task_df" ] }, { "cell_type": "code", - "execution_count": 38, - "id": "2e6f9c68-98b0-4e58-aaeb-d56fee3c4f13", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.3%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685: 70% full (135.7G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:Starting simulation unit\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openfe/protocols/openmm_utils/omm_compute.py:78: UserWarning: Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", - " warnings.warn(wmsg)\n", - "WARNING:root:Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", - "WARNING:openmmtools.multistate.multistatereporter:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", - "WARNING:openmmtools.multistate.multistatesampler:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:minimizing systems\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Please cite the following:\n", - "\n", - " Friedrichs MS, Eastman P, Vaidyanathan V, Houston M, LeGrand S, Beberg AL, Ensign DL, Bruns CM, and Pande VS. Accelerating molecular dynamic simulations on graphics processing unit. J. Comput. Chem. 30:864, 2009. DOI: 10.1002/jcc.21209\n", - " Eastman P and Pande VS. OpenMM: A hardware-independent framework for molecular simulations. Comput. Sci. Eng. 12:34, 2010. DOI: 10.1109/MCSE.2010.27\n", - " Eastman P and Pande VS. Efficient nonbonded interactions for molecular dynamics on a graphics processing unit. J. Comput. Chem. 31:1268, 2010. DOI: 10.1002/jcc.21413\n", - " Eastman P and Pande VS. Constant constraint matrix approximation: A robust, parallelizable constraint method for molecular simulations. J. Chem. Theor. Comput. 6:434, 2010. DOI: 10.1021/ct900463w\n", - " Chodera JD and Shirts MR. Replica exchange and expanded ensemble simulations as Gibbs multistate: Simple improvements for enhanced mixing. J. Chem. Phys., 135:194110, 2011. DOI:10.1063/1.3660669\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:equilibrating systems\n", - "INFO:openmmtools.multistate.multistatesampler:Equilibration iteration 1/5\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openmmtools/mcmc.py:723: UserWarning: Particle coordinate is NaN. For more information, see https://github.com/openmm/openmm/wiki/Frequently-Asked-Questions#nan\n", - " warnings.warn(str(e))\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 0 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 1 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 2 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 3 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 4 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 5 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 6 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 7 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 8 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 9 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 10 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 11 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 12 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 13 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 14 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 15 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 16 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 17 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 18 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "ERROR:openmmtools.mcmc:Potential energy is NaN after 19 attempts of integration with move LangevinDynamicsMove Trying to reinitialize Context as a last-resort restart attempt...\n", - "ERROR:openmmtools.mcmc:Potential energy is NaN after 20 attempts of integration with move LangevinDynamicsMove\n", - "CRITICAL:openmmtools.multistate.multistatesampler:Propagating replica 0 at state 0 resulted in a NaN!\n", - "The state of the system and integrator before the error were saved in /Users/hannahbaumann/ExampleNotebooks/execution/warehouse_mcl1/shared/task_workdirs/HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685/nan-error-logs\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685 as failed.\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Selected task 'HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955'\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HybridTopologyMultiStateSimulationUnit-519c99f8253d472d94b7d1925c385685 succeeded: False\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:openfe.utils.system_probe.log:SYSTEM CONFIG DETAILS:\n", - "INFO:openfe.utils.system_probe.log.hostname:hostname: 'MacBook-Pro-2.local'\n", - "INFO:openfe.utils.system_probe.log.gpu:CUDA-based GPU not found\n", - "INFO:openfe.utils.system_probe.log:Memory used: 5.3G (81.8%)\n", - "INFO:openfe.utils.system_probe.log:scratch/task_workdirs/HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955: 70% full (136.7G free)\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:Starting simulation unit\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openfe/protocols/openmm_utils/omm_compute.py:78: UserWarning: Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", - " warnings.warn(wmsg)\n", - "WARNING:root:Non-CUDA platform selected: CPU, this may significantly impact simulation performance\n", - "WARNING:openmmtools.multistate.multistatereporter:Warning: The openmmtools.multistate API is experimental and may change in future releases\n", - "WARNING:openmmtools.multistate.multistatesampler:Warning: The openmmtools.multistate API is experimental and may change in future releases\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Please cite the following:\n", - "\n", - " Friedrichs MS, Eastman P, Vaidyanathan V, Houston M, LeGrand S, Beberg AL, Ensign DL, Bruns CM, and Pande VS. Accelerating molecular dynamic simulations on graphics processing unit. J. Comput. Chem. 30:864, 2009. DOI: 10.1002/jcc.21209\n", - " Eastman P and Pande VS. OpenMM: A hardware-independent framework for molecular simulations. Comput. Sci. Eng. 12:34, 2010. DOI: 10.1109/MCSE.2010.27\n", - " Eastman P and Pande VS. Efficient nonbonded interactions for molecular dynamics on a graphics processing unit. J. Comput. Chem. 31:1268, 2010. DOI: 10.1002/jcc.21413\n", - " Eastman P and Pande VS. Constant constraint matrix approximation: A robust, parallelizable constraint method for molecular simulations. J. Chem. Theor. Comput. 6:434, 2010. DOI: 10.1021/ct900463w\n", - " Chodera JD and Shirts MR. Replica exchange and expanded ensemble simulations as Gibbs multistate: Simple improvements for enhanced mixing. J. Chem. Phys., 135:194110, 2011. DOI:10.1063/1.3660669\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:minimizing systems\n", - "INFO:gufekey.openfe.protocols.openmm_rfe.hybridtop_units.HybridTopologyMultiStateSimulationUnit:equilibrating systems\n", - "INFO:openmmtools.multistate.multistatesampler:Equilibration iteration 1/5\n", - "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/openmmtools/mcmc.py:723: UserWarning: Particle coordinate is NaN. For more information, see https://github.com/openmm/openmm/wiki/Frequently-Asked-Questions#nan\n", - " warnings.warn(str(e))\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 0 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 1 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 2 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 3 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 4 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 5 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 6 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 7 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 8 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 9 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 10 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 11 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 12 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 13 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 14 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 15 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 16 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 17 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "WARNING:openmmtools.mcmc:Potential energy is NaN after 18 attempts of integration with move LangevinDynamicsMove Attempting a restart...\n", - "ERROR:openmmtools.mcmc:Potential energy is NaN after 19 attempts of integration with move LangevinDynamicsMove Trying to reinitialize Context as a last-resort restart attempt...\n", - "ERROR:openmmtools.mcmc:Potential energy is NaN after 20 attempts of integration with move LangevinDynamicsMove\n", - "CRITICAL:openmmtools.multistate.multistatesampler:Propagating replica 1 at state 1 resulted in a NaN!\n", - "The state of the system and integrator before the error were saved in /Users/hannahbaumann/ExampleNotebooks/execution/warehouse_mcl1/shared/task_workdirs/HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955/nan-error-logs\n", - "INFO:exorcist.taskdb:Marking try of HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955 as failed.\n", - "INFO:exorcist.taskdb:Checking out a new task\n", - "INFO:exorcist.taskdb:Unable to select an available task\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HybridTopologyMultiStateSimulationUnit-bdee1f088c91432da7a950b04f6aa955 succeeded: False\n" - ] - } - ], - "source": [ - "while True:\n", - " execution = worker.execute_unit(scratch=\"scratch\")\n", - " if execution is None:\n", - " break\n", - " taskid, result = execution\n", - " print(f\"{taskid} succeeded: {result.ok()}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "0c480bc5-5900-412c-addf-da8acfb80c04", - "metadata": {}, + "execution_count": 12, + "id": "123581ed-5fc9-4d26-b307-378a37dd0ea3", + "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
taskidstatuslast_modifiedtriesmax_tries
0HybridTopologySetupUnit-953a4b92b4c44425bb647e...COMPLETED2026-09-30 10:48:40.48382611
1HybridTopologySetupUnit-b5cc67648c434ceca4e69e...COMPLETED2026-09-30 10:48:45.66602011
2HybridTopologySetupUnit-f645288db5164800ab84fa...COMPLETED2026-09-30 10:48:46.17475811
3HybridTopologySetupUnit-eaab94ae3e8b4978a55711...COMPLETED2026-09-30 10:48:51.55129611
4HybridTopologyMultiStateSimulationUnit-d3871d9...COMPLETED2026-09-30 11:18:06.72868011
5HybridTopologyMultiStateSimulationUnit-19894f4...COMPLETED2026-09-30 11:22:18.85333711
6HybridTopologyMultiStateSimulationUnit-519c99f...TOO_MANY_RETRIES2026-09-30 14:52:02.58202755
7HybridTopologyMultiStateSimulationUnit-bdee1f0...TOO_MANY_RETRIES2026-09-30 14:53:08.23121055
8HybridTopologyMultiStateAnalysisUnit-aaa8037c1...COMPLETED2026-09-30 11:24:05.75043511
9HybridTopologyMultiStateAnalysisUnit-e193ef5e5...COMPLETED2026-09-30 11:24:26.25636911
10HybridTopologyMultiStateAnalysisUnit-bde91842f...BLOCKEDNaT01
11HybridTopologyMultiStateAnalysisUnit-41940d0c3...BLOCKEDNaT01
\n", - "
" - ], "text/plain": [ - " taskid status \\\n", - "0 HybridTopologySetupUnit-953a4b92b4c44425bb647e... COMPLETED \n", - "1 HybridTopologySetupUnit-b5cc67648c434ceca4e69e... COMPLETED \n", - "2 HybridTopologySetupUnit-f645288db5164800ab84fa... COMPLETED \n", - "3 HybridTopologySetupUnit-eaab94ae3e8b4978a55711... COMPLETED \n", - "4 HybridTopologyMultiStateSimulationUnit-d3871d9... COMPLETED \n", - "5 HybridTopologyMultiStateSimulationUnit-19894f4... COMPLETED \n", - "6 HybridTopologyMultiStateSimulationUnit-519c99f... TOO_MANY_RETRIES \n", - "7 HybridTopologyMultiStateSimulationUnit-bdee1f0... TOO_MANY_RETRIES \n", - "8 HybridTopologyMultiStateAnalysisUnit-aaa8037c1... COMPLETED \n", - "9 HybridTopologyMultiStateAnalysisUnit-e193ef5e5... COMPLETED \n", - "10 HybridTopologyMultiStateAnalysisUnit-bde91842f... BLOCKED \n", - "11 HybridTopologyMultiStateAnalysisUnit-41940d0c3... BLOCKED \n", - "\n", - " last_modified tries max_tries \n", - "0 2026-09-30 10:48:40.483826 1 1 \n", - "1 2026-09-30 10:48:45.666020 1 1 \n", - "2 2026-09-30 10:48:46.174758 1 1 \n", - "3 2026-09-30 10:48:51.551296 1 1 \n", - "4 2026-09-30 11:18:06.728680 1 1 \n", - "5 2026-09-30 11:22:18.853337 1 1 \n", - "6 2026-09-30 14:52:02.582027 5 5 \n", - "7 2026-09-30 14:53:08.231210 5 5 \n", - "8 2026-09-30 11:24:05.750435 1 1 \n", - "9 2026-09-30 11:24:26.256369 1 1 \n", - "10 NaT 0 1 \n", - "11 NaT 0 1 " + "status\n", + "BLOCKED 7\n", + "AVAILABLE 4\n", + "COMPLETED 1\n", + "Name: count, dtype: int64" ] }, - "execution_count": 39, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df=get_task_df(task_db)\n", - "df" + "task_df[\"status\"].value_counts()" ] }, { "cell_type": "markdown", - "id": "2bd7c48e-2098-4bc2-a093-d4d34018b42f", + "id": "dc51bad9-0e47-4498-8ed8-43731dd9fef6", "metadata": {}, "source": [ - "## Gather results\n", + "### Running the rest of a campaign\n", "\n", - "The `Warehouse` now contains a `ProtocolUnitResult` for every completed task. `gather_all_results` reassembles these into one `(ProtocolResult, ProtocolDAGResult)` pair per `ProtocolDAG`.\n", + "For a campaign, a worker could repeatedly execute tasks until no\n", + "work is currently available:\n", "\n", - "Because each `ProtocolDAG` corresponds to one `Transformation`, these are per-leg free energies (the complex or the solvent leg of an edge), not relative binding free energies. See below for combining them.\n", + "```python\n", + "while True:\n", + " result = worker.execute_unit(scratch=\"scratch\")\n", + " if result is None:\n", + " break\n", + "```\n", + "In production, you can start several independent workers in\n", + "separate jobs on an HPC system." + ] + }, + { + "cell_type": "markdown", + "id": "2bd7c48e-2098-4bc2-a093-d4d34018b42f", + "metadata": {}, + "source": [ + "## Gather results\n", "\n", - "You can load an existing `Warehouse` from any session with `FileSystemWarehouse.from_dir`:\n", + "Running the simulation units in this example would be too expensive for a\n", + "tutorial notebook. For the remainder of the tutorial, we therefore use a\n", + "completed `Warehouse` from the same small network.\n", "\n", - "**TODO: rerun to get results with 3 repeats per edge, upload to zenodo**" + "We download the precomputed Warehouse from \n", + "[Zenodo](https://doi.org/10.5281/zenodo.23072369)." ] }, { "cell_type": "code", - "execution_count": 31, - "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", + "execution_count": 13, + "id": "cb4404de-322d-4c9b-9731-cc9527ca2e55", "metadata": { "scrolled": true }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=21905) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100 7449k 100 7449k 0 0 510k 0 0:00:14 0:00:14 --:--:-- 407k\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=21905) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" ] } ], "source": [ - "# load a warehouse\n", + "!curl -fLO https://zenodo.org/records/23072369/files/warehouse_mcl1_small.gz\n", + "!tar -xzf warehouse_mcl1_small.gz" + ] + }, + { + "cell_type": "markdown", + "id": "c7ec9a1b-4c08-4263-a2e6-e3f2e6ce732c", + "metadata": {}, + "source": [ + "A `Warehouse` can be reopened using `FileSystemWarehouse.from_dir`:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1b5da3c0-785a-49dc-963e-00c9dd102e23", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ "from openfe.storage.warehouse import FileSystemWarehouse\n", "\n", - "results_wh = FileSystemWarehouse.from_dir(warehouse_dir)\n", - "result_edges = results_wh.gather_all_results()" + "example_wh = FileSystemWarehouse.from_dir(\"warehouse_mcl1_small\")" + ] + }, + { + "cell_type": "markdown", + "id": "c57ac691-7587-4e94-acf4-a054caeaa22f", + "metadata": {}, + "source": [ + "The `Warehouse` contains the `ProtocolUnitResult`s produced by completed tasks.\n", + "\n", + "`gather_all_results` reconstructs DAG-level results and returns a\n", + "`(ProtocolResult, ProtocolDAGResult)` pair for each gathered `ProtocolDAG`.\n", + "\n", + "For this RBFE network, these `ProtocolResult`s correspond to individual\n", + "**complex or solvent legs** of each edge. They are therefore leg-level\n", + "free-energy estimates, not yet the final relative binding free energies." ] }, { "cell_type": "code", - "execution_count": 32, - "id": "3204e27c-b3b4-4997-8cac-b0932cfa6ccb", + "execution_count": 15, + "id": "a87ce454-5946-43ba-9690-32f245ca51df", "metadata": { "scrolled": true }, @@ -1635,373 +1007,442 @@ "output_type": "stream", "text": [ "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/numpy/_core/_methods.py:219: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/numpy/_core/_methods.py:211: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e42f2d6e8715f91ce1dd6dd3a3b62fe9 (name: 'ligand_3')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n", "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", - "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n" + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-e5a4596e9d800367c6832564a93877f3 (name: 'ligand_1')\n", + "INFO:gufekey.gufe.components.smallmoleculecomponent.SmallMoleculeComponent:Partial charges are present for SmallMoleculeComponent-8f5b6a9848f63293c9b2361b51b466ab (name: 'ligand_2')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ligand_2_complex_ligand_3_complex: 2.48 kilocalorie_per_mole ± 0.00 kilocalorie_per_mole\n", + "ligand_2_solvent_ligand_3_solvent: 1.59 kilocalorie_per_mole ± 0.00 kilocalorie_per_mole\n", + "ligand_1_complex_ligand_2_complex: 0.39 kilocalorie_per_mole ± 0.00 kilocalorie_per_mole\n", + "ligand_1_solvent_ligand_2_solvent: 3.48 kilocalorie_per_mole ± 0.00 kilocalorie_per_mole\n" ] } ], "source": [ - "result_edges = results_wh.gather_all_results();" + "result_edges = example_wh.gather_all_results()\n", + "\n", + "for protocol_result, dag_result in result_edges:\n", + " name = example_wh.load_setup_tokenizable(\n", + " dag_result.transformation_key\n", + " ).name\n", + "\n", + " if dag_result.ok():\n", + " print(\n", + " f\"{name}: \"\n", + " f\"{protocol_result.get_estimate():.2f} ± \"\n", + " f\"{protocol_result.get_uncertainty():.2f}\"\n", + " )\n", + " else:\n", + " print(f\"{name}: failed\")" ] }, { - "cell_type": "code", - "execution_count": 33, - "id": "e1e1314a-6ef8-453d-b70f-19123ab98307", + "cell_type": "markdown", + "id": "9c1507b4-f0fd-4474-a21f-8e1d44b438af", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(,\n", - " ),\n", - " (,\n", - " ),\n", - " (,\n", - " ),\n", - " (,\n", - " )]" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "result_edges" + "### Analysing results with `openfe gather`\n", + "\n", + "Until task-based execution has its own results command, `warehouse_to_legacy_json` writes results in the same format as `openfe quickrun`, one JSON file per `Transformation`. The command-line equivalent is `openfe to-legacy-json example_results/warehouse_mcl1_small/ -o results_mcl1`." ] }, { "cell_type": "code", - "execution_count": 18, - "id": "7ea35b83-b88a-426c-9436-5ee7fec3b0c9", + "execution_count": 17, + "id": "4aba85f7-b3d1-4797-afc4-7ec6f6fd8fd8", "metadata": {}, "outputs": [], "source": [ - "# [(pr.get_estimate(), pr.get_uncertainty()) for pr, dag in result_edges if dag.ok()]" + "from openfe.storage.utils import warehouse_to_legacy_json\n", + "\n", + "warehouse_to_legacy_json(result_edges=result_edges, out_dir=\"results_mcl1\")" + ] + }, + { + "cell_type": "markdown", + "id": "166117b5-31cf-4e99-a151-4d12c6af5dc9", + "metadata": {}, + "source": [ + "The output directory can then be passed to `openfe gather`, which combines the complex and solvent legs into relative binding free energies:" ] }, { "cell_type": "code", - "execution_count": null, - "id": "afc85302-bb60-4649-bd1f-417303dde1dd", + "execution_count": 18, + "id": "0de15fa0-dce3-4538-864a-73a317fa2064", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/pty.py:95: DeprecationWarning: This process (pid=21905) is multi-threaded, use of forkpty() may lead to deadlocks in the child.\n", + " pid, fd = os.forkpty()\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[?25lLoading results: ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 4/4 files\u001b[?25h\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/numpy/_core/_methods.py:219: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/hannahbaumann/.local/share/mamba/envs/openfe_dev/lib/python3.13/site-packages/numpy/_core/_methods.py:211: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n", + "┏━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mligand_i\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mligand_j\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mDDG(i->j) (kcal/mol)\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1muncertainty (kcal/mol)\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n", + "│ ligand_1 │ ligand_2 │ -3.1 │ 0.0 │\n", + "│ ligand_2 │ ligand_3 │ 0.9 │ 0.0 │\n", + "└──────────┴──────────┴──────────────────────┴────────────────────────┘\n" + ] + } + ], + "source": [ + "!openfe gather results_mcl1 --report ddg" + ] + }, + { + "cell_type": "markdown", + "id": "5eca217f-7c19-4a29-819f-44359c68a480", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this tutorial, we:\n", + "\n", + "- created a task-based campaign from an `AlchemicalNetwork` with `setup_task_campaign` which created the `Warehouse` for campaign data and results, and the `TaskStatusDB` for task state and dependencies;\n", + "- used a `Worker` to claim and execute available tasks;\n", + "- inspected how task states change during execution;\n", + "- reopened a completed `Warehouse` and gathered `ProtocolResult`s with `gather_all_results()`.\n", + "\n", + "The key idea is that campaign data, orchestration state, and execution are kept separate. This lets multiple workers operate on the same campaign while OpenFE tracks which tasks are ready to run and stores their results persistently." + ] } ], "metadata": { From 14883b667ba09249dbdb9a62250d77157e45bf28 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Fri, 2 Oct 2026 14:04:15 +0200 Subject: [PATCH 14/16] More tutorial updates --- execution/execution.png | Bin 0 -> 220260 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 execution/execution.png diff --git a/execution/execution.png b/execution/execution.png new file mode 100644 index 0000000000000000000000000000000000000000..b40e73bf6a4213c1d0b0e9d4c8e08b3764b8f7da GIT binary patch literal 220260 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

`XydrEnF+IRWx=Fs%&)~sOPj$RUdWYp6>r~$d& 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 SV_nvOzvD(0$8wK4U;ZDYzmggN literal 0 HcmV?d00001 From 1397db0ccb17cc5a537a5e7d5bc769bbaf61ff7b Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Fri, 2 Oct 2026 14:34:11 +0200 Subject: [PATCH 15/16] More changes --- .../task_based_execution_python_api.ipynb | 68 +++++++++---------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/execution/task_based_execution_python_api.ipynb b/execution/task_based_execution_python_api.ipynb index 8b71843..bb65100 100644 --- a/execution/task_based_execution_python_api.ipynb +++ b/execution/task_based_execution_python_api.ipynb @@ -8,8 +8,8 @@ "# Task-Based Execution with the Python API\n", "\n", "With `openfe quickrun`, you choose and execute a specific `Transformation`.\n", - "Task-based execution moves the orchestration into OpenFE: you provide an entire\n", - "`AlchemicalNetwork`, OpenFE breaks it into dependent tasks, and one or more\n", + "Task-based execution moves the orchestration into **openfe**: you provide an entire\n", + "`AlchemicalNetwork`, **openfe** breaks it into dependent tasks, and one or more\n", "workers claim tasks as soon as they are ready to run.\n", "\n", "A **task** is a single `ProtocolUnit`, for example the setup, simulation, or\n", @@ -35,7 +35,7 @@ "id": "7cb59b18-0873-4f53-ac93-c6283b49aa6b", "metadata": {}, "source": [ - "## \"Drawing\"" + "\"Drawing\"" ] }, { @@ -88,8 +88,7 @@ "source": [ "## Set up the campaign\n", "\n", - "`setup_task_campaign` turns the `AlchemicalNetwork` into the persistent state\n", - "needed for task-based execution:\n", + "`setup_task_campaign` prepares the `AlchemicalNetwork` for task-based execution by creating two resources on disk that workers can reuse later:\n", "\n", "- a **Warehouse**, which stores the network, tasks, DAG information, shared\n", " files, and results;\n", @@ -149,14 +148,13 @@ "source": [ "### The Warehouse\n", "\n", - "The `Warehouse` stores the data required by the campaign. Its directory contains\n", - "separate stores for:\n", + "The `Warehouse` stores the data needed to execute the campaign and the results produced during execution. Its directory contains separate stores for:\n", "\n", - "- `setup`: the `AlchemicalNetwork` and its components;\n", + "- `setup`: the `AlchemicalNetwork` and the objects needed to define the campaign;\n", "- `tasks`: the `ProtocolUnit`s that workers execute;\n", - "- `protocol_dags`: information used to reconstruct DAG-level results;\n", - "- `results`: completed `ProtocolUnitResult`s;\n", - "- `shared`: files passed between related protocol units.\n", + "- `protocol_dags`: information describing the `ProtocolDAG`s used to organize and reconstruct results;\n", + "- `results`: results produced by individual task executions;\n", + "- `shared`: files that need to persist between dependent `ProtocolUnit`s.\n", "\n", "These files and folders should **not** be modified by the user." ] @@ -213,7 +211,7 @@ "\n", "The `TaskStatusDB` stores the orchestration state of the campaign.\n", "`get_task_df` returns the task table as a `pandas.DataFrame`, which is the same\n", - "information shown by `openfe status`.\n", + "information shown by the `openfe status` command.\n", "\n", "For this network, four `Transformation`s × three units per repeat gives\n", "12 tasks.\n", @@ -573,21 +571,19 @@ "source": [ "## Execute tasks with a `Worker`\n", "\n", - "A `Worker` needs the `Warehouse` and the path to the `TaskStatusDB`.\n", + "A `Worker` connects to the `Warehouse` and the `TaskStatusDB` to execute tasks from the campaign.\n", "\n", "Each call to `Worker.execute_unit`:\n", "\n", - "1. claims the next `AVAILABLE` task and marks it `IN_PROGRESS`;\n", - "2. loads its `ProtocolUnit` and any required upstream results from the\n", - " `Warehouse`;\n", - "3. executes the unit, using `scratch` for temporary working files;\n", - "4. stores the resulting execution data and updates the task status.\n", + "1. claims the next `AVAILABLE` task from the `TaskStatusDB` and marks it `IN_PROGRESS`\n", + "2. loads the corresponding `ProtocolUnit` and any required upstream results from the\n", + " `Warehouse`\n", + "3. executes the `ProtocolUnit`, using `scratch` for temporary working files\n", + "4. stores the results in the `Warehouse` and updates the task status in the TaskStatusDB\n", "\n", - "After a successful task completes, the task database reevaluates its\n", - "dependencies and marks downstream tasks as `AVAILABLE`.\n", + "When a task completes successfully, any downstream tasks whose dependencies are now satisfied become `AVAILABLE`.\n", "\n", - "`execute_unit` returns information about the task it executed, or `None` when\n", - "there is no task available for that worker to claim." + "`execute_unit` returns information about the task it executed, or `None` if no task is available to claim." ] }, { @@ -609,11 +605,10 @@ "source": [ "### Execute one task\n", "\n", - "Here, we will execute **one** task to see how the task graph changes.\n", + "Here, we will execute **one** task to see how task states change as dependencies are satisfied.\n", "\n", - "Notice that we do not ask the worker to execute a particular setup unit.\n", - "`Worker.execute_unit` claims whichever task the `TaskStatusDB` says is\n", - "available." + "Notice that we do not choose which task the worker execute.\n", + "`Worker.execute_unit` claims an `AVAILABLE` task from the `TaskStatusDB`. At this point, all available tasks are setup units." ] }, { @@ -669,7 +664,7 @@ "id": "c9b25794-ee22-41c1-92ff-a9822001ec29", "metadata": {}, "source": [ - "After the setup task completes, inspect the task database again.\n", + "After the setup task completes, we inspect the task database again.\n", "\n", "The completed setup unit is now `COMPLETED`. Its corresponding simulation unit\n", "has changed from `BLOCKED` to `AVAILABLE`, while unrelated tasks retain their\n", @@ -883,8 +878,7 @@ "source": [ "### Running the rest of a campaign\n", "\n", - "For a campaign, a worker could repeatedly execute tasks until no\n", - "work is currently available:\n", + "For a campaign, a worker can repeatedly execute tasks until no work is available:\n", "\n", "```python\n", "while True:\n", @@ -892,8 +886,8 @@ " if result is None:\n", " break\n", "```\n", - "In production, you can start several independent workers in\n", - "separate jobs on an HPC system." + "\n", + "In production, several independent workers can run in separate jobs on an HPC system, all operating on the same campaign, to run tasks in parallel." ] }, { @@ -984,7 +978,7 @@ "id": "c57ac691-7587-4e94-acf4-a054caeaa22f", "metadata": {}, "source": [ - "The `Warehouse` contains the `ProtocolUnitResult`s produced by completed tasks.\n", + "The `Warehouse` now contains the `ProtocolUnitResult`s produced by completed tasks.\n", "\n", "`gather_all_results` reconstructs DAG-level results and returns a\n", "`(ProtocolResult, ProtocolDAGResult)` pair for each gathered `ProtocolDAG`.\n", @@ -1368,7 +1362,7 @@ "source": [ "### Analysing results with `openfe gather`\n", "\n", - "Until task-based execution has its own results command, `warehouse_to_legacy_json` writes results in the same format as `openfe quickrun`, one JSON file per `Transformation`. The command-line equivalent is `openfe to-legacy-json example_results/warehouse_mcl1_small/ -o results_mcl1`." + "Until task-based execution has its own results command, we use `warehouse_to_legacy_json` to write results in the same format as `openfe quickrun`, one JSON file per `Transformation`. The command-line equivalent is `openfe to-legacy-json example_results/warehouse_mcl1_small/ -o results_mcl1`." ] }, { @@ -1436,12 +1430,12 @@ "\n", "In this tutorial, we:\n", "\n", - "- created a task-based campaign from an `AlchemicalNetwork` with `setup_task_campaign` which created the `Warehouse` for campaign data and results, and the `TaskStatusDB` for task state and dependencies;\n", - "- used a `Worker` to claim and execute available tasks;\n", - "- inspected how task states change during execution;\n", + "- created a task-based campaign from an `AlchemicalNetwork` with `setup_task_campaign` which created the `Warehouse` and the `TaskStatusDB`\n", + "- used a `Worker` to claim and execute available tasks\n", + "- inspected how task states change during execution\n", "- reopened a completed `Warehouse` and gathered `ProtocolResult`s with `gather_all_results()`.\n", "\n", - "The key idea is that campaign data, orchestration state, and execution are kept separate. This lets multiple workers operate on the same campaign while OpenFE tracks which tasks are ready to run and stores their results persistently." + "The result is a workflow in which **openfe** manages task dependencies and shared campaign data while workers focus on executing available tasks." ] } ], From d7a5f6b3e62d8fb1792da076a6aade91e2ef5771 Mon Sep 17 00:00:00 2001 From: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com> Date: Fri, 2 Oct 2026 14:36:37 +0200 Subject: [PATCH 16/16] Update environment.yaml --- environment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yaml b/environment.yaml index c4e8326..7b4eaf9 100644 --- a/environment.yaml +++ b/environment.yaml @@ -29,4 +29,4 @@ dependencies: - plugcli - pip: - - git+https://github.com/OpenFreeEnergy/openfe@epic/execution_improvements # use conda-forge v1.13.0 after release + - git+https://github.com/OpenFreeEnergy/openfe@main # use conda-forge v1.13.0 after release